অ্যাক্টিভিটি রিসাল্ট রিজিস্ট্রি হ'ল প্রস্তাবিত পদ্ধতি
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)
}
}
}
আরও তথ্যের জন্য এই অফিসিয়াল ডকুমেন্টেশন চেক করুন ।