android-fragments 在Fragment Android中检查运行时权限

mwngjboj  于 2022-11-14  发布在  Android
关注(0)|答案(1)|浏览(223)

我想检查片段内的运行时权限。作为参考,我按照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)
  }       
}

有人能告诉我我做错了什么,如何纠正它。

wz8daaqr

wz8daaqr1#

我不知道会发生什么,但你可以用另一种方法,像这样:

when{
                result[appPerms[0]] == false -> { 
                    //READ_EXTERNAL_STORAGE permission not granted
                    // Do something
                }

                result[appPerms[1]] == false -> {
                    //WRITE_EXTERNAL_STORAGE permission not granted
                    // Do something
                }

                result[appPerms[2]] == false -> {
                    //CAMERA permission not granted
                    // Do something
                }
                
                else -> {
                    //All permissions Granted
                    //Do something
                }
            }

将此代码放入您的activityResultLauncher

相关问题