ActivityResultRegistry යනු නිර්දේශිත ප්රවේශයයි
ComponentActivity
දැන් ලබා ActivityResultRegistry
ඔබ හැසිරවිය ඉඩ සලසන startActivityForResult()
+ onActivityResult()
මෙන්ම requestPermissions()
+ onRequestPermissionsResult()
ආධිපත්යධාරී ඔබේ ක්රම තොරව ගලා Activity
හෝ Fragment
හරහා ආකාරයේ ආරක්ෂක ඉහළ ගෙන එයි ActivityResultContract
, සහ මෙම ගලා පරීක්ෂා කොකු සපයයි.
AndroidX ක්රියාකාරකම් 1.2.0-alpha02 සහ Fragment 1.3.0-alpha02 හි හඳුන්වා දී ඇති ක්රියාකාරකම් ප්රති ult ල API භාවිතා කිරීම තරයේ නිර්දේශ කෙරේ.
මෙය ඔබගේ වෙත එක් කරන්න 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"
කලින් සාදන ලද කොන්ත්රාත්තුව භාවිතා කරන්නේ කෙසේද?
මෙම නව API හි පහත සඳහන් පූර්ව සාදන ලද ක්රියාකාරකම් ඇත
- TakeVideo
- PickContact
- GetContent
- GetContents
- OpenDocument
- OpenDocuments
- OpenDocumentTree
- CreateDocument
- අමතන්න
- පින්තූරයක් ගන්න
- ඉල්ලීම් අවසරය
- ඉල්ලීම් අවසර
TakePictures කොන්ත්රාත්තුව භාවිතා කරන උදාහරණයක්:
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)
.
අභිරුචි කොන්ත්රාත්තුවක් ලියන්නේ කෙසේද?
සරල කොන්ත්රාත්තුවක් මඟින් ආදාන ලෙස ආදානයක් ලබාගෙන ක්රියාකාරී ඉල්ලීම් කළ නූලක් ප්රති result ලයෙන් ලබා දෙයි.
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)
}
}
}
වැඩි විස්තර සඳහා මෙම නිල ලේඛනය පරීක්ෂා කරන්න .