android 6.0适配(总结)

6.0的适配主要是权限:

权限的分组:

普通权限:也就是正常权限,是对手机的一些正常操作,对用户的隐私没有太大影响的权限,比如手机的震动,网络访问,蓝牙等权限,这些权限会在应用被安装的时候默认授予,用户不能拒绝,也不能取消

危险权限:其实就是运行中需要处理的权限,也是我们最需要注意的权限,这些权限会关系到用户的隐私或影响到其他应用的运行

权限的申请:

@RequiresApi(api = Build.VERSION_CODES.M)
private void checkPermission() {
String[] permissions = new String[]{
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.RECORD_AUDIO,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.CAMERA,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE};

ActivityCompat.requestPermissions(this, permissions, 1000);
}

@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
for (String permission : permissions) {
if (PermissionUtils.isGranted(permission)) {
Log.i("permission", "同意的权限:" + permission);
} else {
//已拒绝
finish();
Log.i("permission", "已拒绝的权限:" + permission);
if (!ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {
//禁止后不再询问
Log.i("permission", "禁止后不再询问的权限:" + permission);
}
}
}
}

/**
* Return whether <em>you</em> have granted the permissions.
*
* @param permissions The permissions.
* @return {@code true}: yes<br>{@code false}: no
*/
public static boolean isGranted(final String... permissions) {
for (String permission : permissions) {
if (!isGranted(permission)) {
return false;
}
}
return true;
}

private static boolean isGranted(final String permission) {
return Build.VERSION.SDK_INT < Build.VERSION_CODES.M
|| PackageManager.PERMISSION_GRANTED
== ContextCompat.checkSelfPermission(Utils.getApp(), permission);
}

 Android 6.0中,还有两个特殊权限的处理:

  • 设置悬浮窗: SYSTEM_ALERT_WINDOW

  • 修改系统设置:WRITE_SETTINGS

 修改系统设置权限的授权 WRITE_SETTINGS,与其他权限不同,而是使用startActivityForResult,启动系统设置的授权界面来申请
private void requestWriteSettings() {
try {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
//修改系统设置,正常处理逻辑
} else {
if (!Settings.System.canWrite(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_CODE_WRITE_SETTINGS);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}

@RequiresApi(api = Build.VERSION_CODES.M)
@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("permission", "onActivityResult write settings granted");
//修改系统设置,正常处理逻辑
}
}
}
更多参考:
https://blog.csdn.net/yangdahuan/article/details/60966887
https://www.jianshu.com/p/feb6dd8d2212
https://www.jianshu.com/p/82997b7033da
https://www.jianshu.com/p/c3908cb3554d (特殊权限处理)

转载于:https://www.cnblogs.com/candyzhmm/p/11242533.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值