Google 运行时请求权限处理
2017-12-13 18:26
387 查看
Google 7.0版本开始,需要在代码中加入权限检查。否则,就无法上Google Play商店。
相关文档:https://developer.android.com/training/permissions/requesting.html
不过,文档十分含糊,不踩几个坑是不可能搞清楚的。
在此我列出相关API,并加以说明
ActivityCompat.requestPermissions 请求权限,如果部分权限需要用户确认,就好弹出系统消息框,确认是否 开启权限。
Activity.onRequestPermissionsResult 请求权限结果回调接口,需要在主Activity中实现。
ContextCompat.checkSelfPermission 检查是否有请求
Activity.shouldShowRequestPermissionRationale 检查是否点选了“禁止后不再询问”选项。
以下为参考代码
相关文档:https://developer.android.com/training/permissions/requesting.html
不过,文档十分含糊,不踩几个坑是不可能搞清楚的。
在此我列出相关API,并加以说明
ActivityCompat.requestPermissions 请求权限,如果部分权限需要用户确认,就好弹出系统消息框,确认是否 开启权限。
Activity.onRequestPermissionsResult 请求权限结果回调接口,需要在主Activity中实现。
ContextCompat.checkSelfPermission 检查是否有请求
Activity.shouldShowRequestPermissionRationale 检查是否点选了“禁止后不再询问”选项。
以下为参考代码
public class MainActivity extends NativeActivity { private static final int PERMISSION_REQUEST_CODE = 200; //需要检查的权限列表 private static final String[] permissions = new String[] { "android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.READ_PHONE_STATE", "android.permission.SEND_SMS", "android.permission.GET_ACCOUNTS", "android.permission.RECEIVE_SMS", }; @Override protected void onCreate(Bundle savedInstanceState) { //检查权限 requestPermissions(permissions); super.onCreate(); } /** * 权限检查函数 */ private void requestPermissions(String[] permissions) { if(permissions == null || permissions.length == 0) return; ActivityCompat.requestPermissions(this, permissions, PERMISSION_REQUEST_CODE); } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { Log.d("SiriusActivity", "onRequestPermissionsResult requestCode="+requestCode); switch (requestCode) { case PERMISSION_REQUEST_CODE: if (grantResults.length > 0) { //定义拒绝权限数 int deny_count = 0; //挑出被拒绝的权限 for(int i=0; i<permissions.length; ++i) { if(grantResults[i] == PackageManager.PERMISSION_GRANTED) //通过 Log.d("MainActivity", permissions[i] + " is GRANTED") else { //权限被拒绝 Log.d("MainActivity", permissions[i] + " is DENIED") deny_count += 1; } } if(deny_count>0) //有权限被拒绝 doFinishMessageBox(); } break; default: super.onRequestPermissionsResult(requestCode, permissions, grantResults); } } /** * 退出对话框 */ private void doFinishMessageBox() { new AlertDialog.Builder(this) .setMessage("警告\n" + "有权限被拒绝啦!" ) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //退出 MainActivity.instance.finish(); } }) .setCancelable(false) .create() .show(); } }
相关文章推荐
- Android 6.0 运行时权限处理终结全网请求权限开源库出现的各种坑包括认为是google的bug
- Android6.0及以上版本一次请求多个权限的处理方式
- Android 系列 2.2在运行时请求Android权限
- Android 6.0 运行时权限处理
- APP-FND-00204:并发管理器在运行并发请求xxxxx的派生并发程序 接收事务处理管理器 - RCVOLTM时出错。TM-TIMEOUT.
- Android 6.0 运行时权限处理完全解析
- Android 6.0 运行时权限处理
- 安卓6.0运行时权限处理的适用条件
- Android 6.0 运行时权限处理
- Android6.0运行时权限处理透析
- Android 6.0 运行时权限简明处理
- ASP.NET页面运行机制以及请求处理流程
- 安卓6.0运行时权限处理
- 浅谈Android 6.0 运行时权限处理完全解析
- Android 运行时权限处理封装在 BaseActivity 中,方便业务申请时只需要简单的 1,2 行代码即可成功处理权限申请
- Android 6.0 运行时权限处理完全解析
- PermissionsDispatcher库的使用(简单处理Android 6.0系统中的运行时权限的开源库)
- Android 6.0 运行时权限处理
- Android6.0运行时权限处理架构搭建
- Android 6.0 运行时权限处理完全解析 (摘抄)