安卓开发入门教程-运行时权限
发布日期:2021-06-29 18:30:00 浏览次数:2 分类:技术文章

本文共 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)申请权限

  1. 在模块build.gradle文件中添加第三方库(SoulPermission)依赖
implementation 'com.qw:soulpermission:1.3.0'
  1. 在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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:安卓开发入门教程-UI控件_ProgressBar
下一篇:安卓自定义对话框(弹出框)并添加显示动画

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月19日 09时16分05秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章