অ্যাক্টিভিটি রিসাল্ট রিজিস্ট্রি হ'ল প্রস্তাবিত পদ্ধতি
ComponentActivity
এখন একটি উপলব্ধ ActivityResultRegistry
আপনি সব ব্যবস্থা করতে দেয় startActivityForResult()
+ + onActivityResult()
সেইসাথে requestPermissions()
+ + onRequestPermissionsResult()
আপনার পদ্ধতি অগ্রাহ্য ছাড়া প্রবাহিত Activity
বা Fragment
মাধ্যমে বর্ধিত টাইপ নিরাপত্তা এনেছে ActivityResultContract
, ও পরীক্ষামূলক এই প্রবাহিত জন্য হুক্স প্রদান করে।
অ্যান্ড্রয়েডএক্স ক্রিয়াকলাপ 1.2.0-alpha02 এবং খণ্ড 1.3.0-alpha02 এ প্রবর্তিত ক্রিয়াকলাপ ফলাফল API গুলি ব্যবহার করার জন্য দৃ strongly়ভাবে সুপারিশ করা হয়।
এটি আপনার যুক্ত করুন build.gradle
def activity_version = "1.2.0-alpha03"
// Java language implementation
implementation "androidx.activity:activity:$activity_version"
// Kotlin
implementation "androidx.activity:activity-ktx:$activity_version"
প্রাক-নির্মিত চুক্তিটি কীভাবে ব্যবহার করবেন?
এই নতুন এপিআই-র নিম্নলিখিত বিল্ট কার্যকারিতা রয়েছে
- TakeVideo
- PickContact
- GetContent
- GetContents
- ওপেন-ডকুমেন্ট
- OpenDocuments
- OpenDocumentTree
- CreateDocument
- ডায়াল
- ছবি তোলা
- অনুমতির অনুরোধ
- RequestPermissions
টেকপিকচার চুক্তি ব্যবহার করে এমন একটি উদাহরণ:
private val takePicture = prepareCall(ActivityResultContracts.TakePicture())
{ bitmap: Bitmap? ->
// Do something with the Bitmap, if present
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener { takePicture() }
}
তাহলে এখানে কি হচ্ছে? এটি কিছুটা ভাঙ্গা যাক। takePicture
এটি কেবলমাত্র একটি কলব্যাক যা একটি বিলট ম্যাপকে ফিরিয়ে দেয় - onActivityResult
প্রক্রিয়াটি সফল হয়েছিল কিনা তার উপর এটি নাল নির্ভর করে । prepareCall
তারপরে এই কলটিকে একটি নতুন বৈশিষ্ট্যে নিবন্ধভুক্ত করে ComponentActivity
যার নাম রয়েছে ActivityResultRegistry
- আমরা পরে এটিতে ফিরে আসব। ActivityResultContracts.TakePicture()
গুগল আমাদের জন্য তৈরি করেছেন এমন অন্তর্নির্মিত takePicture
সহায়কগুলির মধ্যে একটি এবং অবশেষে অনুরোধ করা ঠিক তেমনভাবে ইন্টেন্টকে ট্রিগার করে যা আপনি আগে করেছিলেন Activity.startActivityForResult(intent, REQUEST_CODE)
।
কিভাবে কাস্টম চুক্তি লিখবেন?
সাধারণ চুক্তি যা ইনপুট হিসাবে কোনও ইন্টার নেয় এবং এমন একটি স্ট্রিং দেয় যা অনুরোধী ক্রিয়াকলাপটিকে ফলাফল হিসাবে প্রত্যাবর্তন করে।
class MyContract : ActivityResultContract<Int, String>() {
companion object {
const val ACTION = "com.myapp.action.MY_ACTION"
const val INPUT_INT = "input_int"
const val OUTPUT_STRING = "output_string"
}
override fun createIntent(input: Int): Intent {
return Intent(ACTION)
.apply { putExtra(INPUT_INT, input) }
}
override fun parseResult(resultCode: Int, intent: Intent?): String? {
return when (resultCode) {
Activity.RESULT_OK -> intent?.getStringExtra(OUTPUT_STRING)
else -> null
}
}
}
class MyActivity : AppCompatActivity() {
private val myActionCall = prepareCall(MyContract()) { result ->
Log.i("MyActivity", "Obtained result: $result")
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...
button.setOnClickListener {
myActionCall(500)
}
}
}
আরও তথ্যের জন্য এই অফিসিয়াল ডকুমেন্টেশন চেক করুন ।