我想检查片段内的运行时权限。作为参考,我按照This问题进行了操作。权限对话框正确显示,但当我授予权限时,发生了此异常
java.lang.RuntimeException: Failure delivering result ResultInfo{who=@android:requestPermissions:, request=499835773, result=-1, data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has extras) }} to activity {com.test.myApp.dev/com.test.myApp.MyActivity}: java.lang.IndexOutOfBoundsException: Index: 499835773, Size: 5
这是我在Fragment中的代码。为此,我使用了This Answer作为参考
private var activityResultLauncher: ActivityResultLauncher<Array<String>>
init{
this.activityResultLauncher = registerForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()) {result ->
var allAreGranted = true
for(b in result.values) {
allAreGranted = allAreGranted && b
}
if(allAreGranted) {
capturePhoto()
}
}
}
// --- ---
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// ... ... init views / binding... ...
someBtn.setOnClickListener{
val appPerms = arrayOf(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA
)
activityResultLauncher.launch(appPerms)
}
}
有人能告诉我我做错了什么,如何纠正它。
1条答案
按热度按时间wz8daaqr1#
我不知道会发生什么,但你可以用另一种方法,像这样:
将此代码放入您的activityResultLauncher