#Android学习#如何提示Android用户开启权限?

笔者近这天在研究蓝牙开发,无奈总是搜索不到周围的蓝牙设备,笔者觉得自己的逻辑应该没有错误的,因为笔者直接看的是google的官方文档,按着示例代码敲下来的,而且android studio也没有报任何的error,在不经意间,笔者把该程序的应用程序的权限中的地理位置打开,却发现可以搜索到周围的设备了…于是笔者就有了下面这么一篇分享(基于Android API 23以上):

  • 为什么有的android程序的权限在开发的时候,不用在权限管理里面打开也可以正常使用呢?

    这是因为google把permission权限分为好几个Protection leve,可以在google的官方文档的权限列表里面看到,其中,危险级别的是需要用户经过选择允许才可以开启的,也就是说,需要开发者在程序代码中逻辑实现给用户选择,不然,用户不知道是否需要开启所需要的权限;

  • 如何逻辑实现提示用户开启程序所需要的权限呢?

//检查系统是否开启了地理位置权限;
                //注意:此时的Manifest的导入包路径import android.Manifest;
                if (ContextCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION)
                        != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 1);
                }
  • 执行完requestPermissions方法后,Activity会自动回调一个onRequestPermissionsResult方法:
//requestPermissions方法执行后的回调方法
    /*
    * requestCode:相当于一个标志,
    * permissions:需要传进的permission,不能为空
    * grantResults:用户进行操作之后,或同意或拒绝回调的传进的两个参数;
    * */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        //这里实现用户操作,或同意或拒绝的逻辑
        /*grantResults会传进android.content.pm.PackageManager.PERMISSION_GRANTED 或 android.content.pm.PackageManager.PERMISSION_DENIED两个常,前者代表用户同意程序获取系统权限,后者代表用户拒绝程序获取系统权限*/
    }
  • 实现上面的逻辑,系统会自动弹出一个dialog的对话框,与用户进行交互,去提示用户是否允许权限;

附录
以下是危险级别的权限:

  1. ACCESS_COARSE_LOCATION:允许APP访问大概地理位置。
  2. ACCESS_FINE_LOCATION:允许APP访问精确地理位置。
  3. ADD_VOICEMAIL:允许APP添加语音信箱在程序里面。
  4. BODY_SENSORS:允许应用程序访问用户用来衡量身体内发生的情况的传感器的数据,例如心率。
  5. CALL_PHONE:允许应用程序发起电话而不通过拨号器用户界面供用户确认通话。
  6. CAMERA:请求能够访问摄像头设备。
  7. GET_ACCOUNTS:允许访问帐户服务中的帐户列表。
  8. PROCESS_OUTGOING_CALLS:允许应用程序在呼出期间查看正在拨打的电话号码,并选择将呼叫重定向到其他号码或完全中止呼叫。
  9. READ_CALENDAR:允许应用程序读取用户的日历数据。
  10. READ_CALL_LOG:允许程序读取用户的呼叫日志。
  11. READ_CONTACTS:允许程序能够读取用户的联系人的数据。
  12. READ_EXTERNAL_STORAGE:允许程序读取扩展存储。
  13. READ_LOGS:允许程序读取受保护的日志文件。
  14. READ_PHONE_STATE:允许只读访问电话状态,包括设备的电话号码,当前的蜂窝网络信息,任何正在进行的呼叫的状态以及在设备上注册的任何PhoneAccounts的列表。
  15. READ_SMS:允许程序读取手机短信。
  16. RECEIVE_MMS:允许程序去监听手机接收到的MMS信息
  17. RECEIVE_SMS:允许程序去接收信息。
  18. RECEIVE_WAP_PUSH:允许应用程序接收WAP推送消息。
  19. RECORD_AUDIO:允许应用程序录制音频。
  20. SEND_SMS:允许应用程序发送短信。
  21. USE_SIP:允许应用程序使用SIP服务。
  22. WRITE_CALENDAR:允许应用程序写入用户的日历数据。
  23. WRITE_CALL_LOG:允许应用程序写入(但不读取)用户的通话记录数据。
  24. WRITE_CONTACTS:允许应用程序写入用户的联系人数据。
  25. WRITE_EXTERNAL_STORAGE:允许程序去写入扩展的存储。

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值