Android动态权限获取总结
来源:互联网 发布:薛之谦的淘宝女装店 编辑:程序博客网 时间:2024/05/23 22:05
现在Android SDK API Level 都出到25了,市面上搭载Android6.0以上系统的手机占有率越来越高,最近给自己手头上在开发的项目做了些改进,加上了动态权限获取,在这总结下自己的做法:
首先当然是来个判断(项目需要用的敏感权限主要是相机和读取手机存储两个权限):
private final String[] permissions=new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE};//相机权限 写入内存权限
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){ //判断两个权限是否都已获取 if (a!= PackageManager.PERMISSION_GRANTED||b!=PackageManager.PERMISSION_GRANTED){ //已授权为GRANTEED 未授权为DINIED showRequestPermissionDialog(); }}显示请求获取权限的对话框的方法:
private void showRequestPermissionDialog() { new AlertDialog.Builder(this).setTitle("获取相机与写入内存权限").setMessage("没有相机与写入内存的权限,程序功能将受限") .setPositiveButton("立即开启", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //点击开启权限按钮所做的操作 permissions为 ActivityCompat.requestPermissions(MainActivity.this,permissions,123); } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //点击取消按钮所做的操作 finish(); } }).setCancelable(false).create().show();}重写请求获取权限后的回调函数:
@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if(requestCode==1){ //判断是不是自己设置的请求码 if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){//判断目前的系统是不是大于6.0 if(grantResults[0]!=PackageManager.PERMISSION_GRANTED||grantResults[1]!=PackageManager.PERMISSION_GRANTED){//是否仍然没有给权限 boolean b=shouldShowRequestPermissionRationale(permissions[0]); boolean c=shouldShowRequestPermissionRationale(permissions[1]); if(!b||!c){ //用户是否选择了不再提醒 showDialogTipUserGoToAppSetting(); }else{ finish(); } }else{ Toast.makeText(this, "获取权限成功!", Toast.LENGTH_SHORT).show(); } } }用户选择了拒绝授予权限,并且选择了不再提醒,只能通过打开系统对应的应用权限设置界面,要求用户手动设置:
private void showDialogTipUserGoToAppSetting() { dialog=new AlertDialog.Builder(this).setTitle("相机权限") .setMessage("请在-设置-权限管理中,为绘酷打开相机和读写手机存储权限") .setPositiveButton("立即开启", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { goToAppSetting(); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }).setCancelable(false).create(); dialog.show();}打开系统对应应用权限设置界面的方法:
private void goToAppSetting() { Intent intent=new Intent(); intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri=Uri.fromParts("package",getPackageName(),null); intent.setData(uri); startActivityForResult(intent,1);}重写设置回来后的回调函数:
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode==1){ if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){ int i=ContextCompat.checkSelfPermission(this,permissions[0]); int j=ContextCompat.checkSelfPermission(this,permissions[1]); if(i!=PackageManager.PERMISSION_GRANTED||j!=PackageManager.PERMISSION_GRANTED){ showDialogTipUserGoToAppSetting(); }else{ if(dialog!=null&&dialog.isShowing()){ dialog.dismiss(); } Toast.makeText(this, "权限获取成功", Toast.LENGTH_SHORT).show(); } } }}
1 0
- Android动态权限获取总结
- Android动态获取权限
- Android 动态获取权限
- Android动态获取权限
- android 动态权限获取
- Android动态获取权限
- android动态权限总结
- Android M 动态权限获取
- Android M 动态权限获取
- Android M 动态权限获取
- android 6.0 动态权限获取
- Android 6.0获取动态权限
- Android M 动态权限获取
- android 6.0权限动态获取
- Android 6.0权限动态获取
- Android手机动态获取权限
- Android M动态获取权限示例
- Android 6.0动态权限的获取
- 打印菱形和空心菱形
- 解决 make时报错 fatal error: ltdl.h: No such file or directory的方法
- PHP递归爆栈问题
- MVC框架的总结
- React Native打包发布--Android
- Android动态权限获取总结
- C# 浅复制和深复制
- 输入年月 打印相应星期
- html头部meta标签详解
- 面试
- 异步任务神器 Celery 快速入门
- Tinker接入详解
- HDFS文件读写过程
- 关于 Token,你应该知道的十件事