基于JetPack实现的权限动态获取
2020/7/28 23:03:48
本文主要是介绍基于JetPack实现的权限动态获取,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
最近在学习如何使用
Jetpack
以及kotlin
,相较于以往使用的onActivityResult
,androidx-activity 1.2.0-alpha02
及Fragment 1.3.0-alpha02
版本中新追加了apiActivityResultContract
环境配置
为使用ActivityResultContract
,我们需要在gradle
文件中添加相关依赖,这里我使用的是alpha03版本
implementation "androidx.activity:activity-ktx:1.2.0-alpha03" implementation 'androidx.fragment:fragment-ktx:1.3.0-alpha03' 复制代码
使用方法
ActivityResultContract
和Fragment
可以通过registerForActivityResult()
函数创建launcher
,接着通过调用launcher.launch(intent)
进行使用
由于版本或其他不可抗力,我在使用过程中发现registerForActivityResult()
不可使用,查阅资料发现,registerForActivityResult()
是prepareCall()
的重命名,于是只能暂时使用prepareCall()
读取图片
设置launcher
private val launcher = prepareCall(ActivityResultContracts.GetContent()) { uri -> Toast.makeText(context,"uri:$uri",Toast.LENGTH_SHORT).show() } 复制代码
launcher调用launch
launcher.launch("image/*") 复制代码
权限获取(RequestPermission)
前提
如需动态获取对应权限,应当在AndroidManifest下对应填写相应语句,如WRITE_EXTERNAL_STORAGE
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 复制代码
设置launcher
val requestPermissionLauncher = prepareCall( ActivityResultContracts.RequestPermission() ) { isGranted: Boolean -> if (isGranted) { Toast.makeText(context, "result: granted", Toast.LENGTH_LONG).show() } else { Toast.makeText(context, "result:fail", Toast.LENGTH_LONG).show() } } 复制代码
launcher调用launch
requestPermissionLauncher.launch(WRITE_EXTERNAL_STORAGE) 复制代码
总结
老菜鸡了,看个jetpack的权限调用看了一个下午,写个文章记录一下踩过的坑吧,确实使用jetpack会让代码整洁许多,好东西好东西,继续加油
这篇关于基于JetPack实现的权限动态获取的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-01-18android.permission.read_media_video
- 2024-01-18android_getaddrinfo failed eai_nodata
- 2024-01-18androidmo
- 2024-01-15Android下三种离屏渲染技术
- 2024-01-09Android 蓝牙使用
- 2024-01-06Android对接华为AI - 文本识别
- 2023-11-15代码安全之代码混淆及加固(Android)
- 2023-11-10简述Android语音播报TTS
- 2023-11-06Android WiFi工具类
- 2023-07-22Android开发未来的出路