AndroidregisterForActivityResult动态申请权限案例详解前⾔
这⼏天在做⼀个⼩⼯具app,结果在fragment⾥⾯动态申请权限提⽰原有的申请⽅法已经弃⽤,还画了很明显的删除线。。。这叫⼀个强迫症的我怎么受得了。赶紧⽹上资料也不出什么结果,看了官⽅⽂档才发现了有registerForActivityResult这么⼀个神奇好⽤的函数,可以代替我们现有的startActivityForResult和权限申请函数。
那么下⾯就分两种情况来讲⼀下如何使⽤这个函数动态申请权限。
⼀、申请单个权限
⾸先,我们需要定义⼀个launcher:
ActivityResultLauncher<String> launcher = registerForActivityResult(new ActivityResultContracts.RequestPermission(),
result -> {
if (result.equals(true)) {
register for
//权限获取到之后的动作
} else {
//权限没有获取到的动作
}
});
上⾯代码⾥的ActivityResultContracts.RequestPermission()就是告诉系统你要获取权限,result是返回结果
可以看出只要权限获取到了,这⾥result返回就是true,直接进⾏判断即可。
当然,只定义了这个launcher系统是不会执⾏的,因为这只是⼀个注册函数,还要在你需要执⾏的地⽅加⼊如下的代码:button.setOnClickListener(view -> {
launcher.launch(Manifest.permission.READ_EXTERNAL_STORAGE);
});
完成后当你点击这个button的时候,就会跳出申请读存储权限的提⽰。
⼆、获取多个权限
这⾥我以同时获取拍照和存储两个权限为例,三个及以上的原理类似。
和获取单个权限⼀样,获取多个权限也需要定义⼀个launcher:
ActivityResultLauncher<String[]> launcher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(),
result -> {
if ((Manifest.permission.CAMERA) != null
&& (Manifest.permission.READ_EXTERNAL_STORAGE) != null) {
if ((Manifest.permission.CAMERA)).equals(true)
&& (Manifest.permission.READ_EXTERNAL_STORAGE)).equals(true)) {
/
/权限全部获取到之后的动作
} else {
//有权限没有获取到的动作
}
}
});
和单个权限不同的是,多个权限传⼊的⽅法是ActivityResultContracts.RequestMultiplePermissions()。ActivityResultLauncher⾥⾯带的是⼀个string数组。返回值result的类型是map(样例如下表)。
申请的权限(String)权限的申请结果(boolean)
Manifest.permission.CAMERA true/false
Manifest.permission.READ_EXTERNAL_STORAGE true/false
所以直接使⽤map⾥的get⽅法就可以获取每个权限对应的结果。我以为就这样结束了,结果编译器在我get⽅法这⾥画了黄黄的底⾊,⼀看提⽰说可能导致空指针异常。所以我就多加了quireNonNull,警告马上消失。
最后⼀步同样不能少,在需要获取权限的地⽅执⾏⼀下launch⽅法:
launcher.launch(new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE})
三、总结
registerForActivityResult真的是个很好⽤的函数,要不是提⽰我之前的被弃⽤了我可能⼀直都不知道,不光可以代替获取权限⽅法,startActivityForResult⽅法也可以替换为这个函数。
到此这篇关于Android registerForActivityResult动态申请权限案例详解的⽂章就介绍到这了,更多相关Android registerForActivityResult动态申请权限内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。