今天项目中,遇到一个问题:运行时权限:当用户在小米手机上拒绝过一次后,下次再需要此权限,并不会再次进行请求权限。后查阅的出:小米手机再用户第一次拒绝 后,默认勾选了“不再提示”选项。
遂:将权限全面的剖析,进行多机型适配,以备录。
1、判断系统版本--Build.VERSION.SDK_INT

2、检查时候开启权限--checkSelfPermission

3、是否显示请求权限提示--shouldShowRequestPermissionRationale

4、请求权限---requestPermission

5、请求处理:
1、实现--OnRequestPermissionsResultCallback

2、处理--回调方法

项目github链接:
点击打开链接
[补充注意点]
1、有以下特殊权限,需要不同的操作。
2、SYSTEM_ALERT_WINDOW,设置悬浮窗,进行一些黑科技
WRITE_SETTINGS 修改系统设置
3、关于上面两个特殊权限的授权,做法是使用startActivityForResult启动授权界面来完成。
request:
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_CODE);
result:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == REQUEST_CODE){
if(Settings.canDrawOverlays(this)){
Log.i(TAG, "onActivityResult granted"):
}
}
}
3.2
1.使用Action Settings.ACTION_MANAGE_OVERLAY_PERMISSION启动隐式Intent
2.使用"package:" + getPackageName()携带App的包名信息
3.使用Settings.canDrawOverlays方法判断授权结果
4、
request:
Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_CODE_WRITE_SETTINGS);
result:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == REQUEST_CODE_WRITE_SETTINGS){
if(Settings.System.canWrite(this)){
Log.i(TAG, "onActivityResult write settings granted");
}
}
}
使用Action Settings.ACTION_MANAGE_WRITE_SETTINGS 启动隐式Intent
使用"package:" + getPackageName()携带App的包名信息
使用Settings.System.canWrite方法检测授权结果