安卓开发入门教程-运行时权限
发布日期:2021-06-29 18:30:00
浏览次数:3
分类:技术文章
本文共 3345 字,大约阅读时间需要 11 分钟。
关注 ,免费获取全套安卓开发学习资料
什么是运行时权限
为了更好的保护用户隐私及安全,安卓自6.0版本开始,引入运行时动态权限检查机制.应用需要访问一些涉及用户隐私及安全权限时,应用需要调用系统权限检查接口,查看是否已获得权限,如果没有,则由系统弹出权限申请窗口,由用户决定是否允许使用相应权限.
基础样例
下面例子中将申请打电话权限并完成打电话功能.
使用安卓原生方式申请权限
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) button.setOnClickListener { applyPermissionAndCall() } } /** * 先检查权限,如果已经获得权限,直接拨打电话; * 否则申请权限。 */ private fun applyPermissionAndCall() { if (hasPermission()) { call() } else { ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.CALL_PHONE), 1) } } /** * 检查是否有权限 */ private fun hasPermission(): Boolean { val result = ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) return result == PackageManager.PERMISSION_GRANTED } /** * 处理申请权限的结果,如果获得了权限,则拨打电话,否则toast报错。 */ override fun onRequestPermissionsResult( requestCode: Int, permissions: Array, grantResults: IntArray ) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) when (requestCode) { 1 -> { if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { call() } else { toast("没权限,打不了😢") } } } } /** * 调用系统打电话功能,拨打10086 */ private fun call() { try { val intent = Intent(Intent.ACTION_CALL) intent.data = Uri.parse("tel:10086") startActivity(intent) } catch (e: SecurityException) { e.printStackTrace() } } private fun toast(text: String) = Toast.makeText(this, text, Toast.LENGTH_SHORT).show()}
使用第三方开源库(SoulPermission)申请权限
- 在模块build.gradle文件中添加第三方库(SoulPermission)依赖
implementation 'com.qw:soulpermission:1.3.0'
- 在activity中调用
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) button.setOnClickListener { applyPermissionAndCall() } } /** * 先申请权限,再打电话 */ private fun applyPermissionAndCall() { SoulPermission.getInstance() .checkAndRequestPermission( Manifest.permission.CALL_PHONE, object : CheckRequestPermissionListener { override fun onPermissionOk(permission: Permission) { call() } override fun onPermissionDenied(permission: Permission) { toast("没权限,打不了😢") } }) } /** * 调用系统打电话功能,拨打10086 */ private fun call() { try { val intent = Intent(Intent.ACTION_CALL) intent.data = Uri.parse("tel:10086") startActivity(intent) } catch (e: SecurityException) { e.printStackTrace() } } private fun toast(text: String) = Toast.makeText(this, text, Toast.LENGTH_SHORT).show()}
完整源代码
安卓开发入门教程系列汇总
开发语言学习
UI控件学习系列
关注头条号,第一时间获取最新文章:
转载地址:https://cxyxy.blog.csdn.net/article/details/107681326 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月09日 10时18分55秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
mmap函数实现
2019-04-30
音频基础知识详解
2019-04-30
Linux 命令xxd功能
2019-04-30
repo使用指南
2019-04-30
gstreamer-test
2019-04-30
GDB基本用法
2019-04-30
动态范围控制(DRC)简介
2019-04-30
使用C语言查看一个文件夹中所有文件及目录
2019-04-30
音频硬件基础
2019-04-30
TS流分析
2019-04-30
详解YUV420数据格式
2019-04-30
Gstreamer学习笔记(2):GstElement定义、连接
2019-04-30
GStreamer建议的学习步骤和网页链接汇总
2019-04-30
Ubuntu14.04编译安装GStreamer
2019-04-30
GStreamer(一)
2019-04-30
GStreamer(二)
2019-04-30
Gstreamer学习笔记(1):GStreamer Debugging
2019-04-30
bitbake常用命令
2019-04-30