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/60966887https://www.jianshu.com/p/feb6dd8d2212https://www.jianshu.com/p/82997b7033dahttps://www.jianshu.com/p/c3908cb3554d (特殊权限处理)

android 6.0适配(总结)的更多相关文章

  1. Android权限管理之RxPermission解决Android 6.0 适配问题

    前言: 上篇重点学习了Android 6.0的运行时权限,今天还是围绕着Android 6.0权限适配来总结学习,这里主要介绍一下我们公司解决Android 6.0权限适配的方案:RxJava+RxP ...

  2. Android 9.0适配遇到的问题1

    文章同步自javaexception 本周在适配Android 9.0,过程中碰到了小问题 问题1: SSL handshake timed out 解决办法: Android 9.0 开始,默认不允 ...

  3. android 8.0 适配(总结)

    android 8.0 对应的 sdk 版本  26 1. 通知栏 Android 8.0 引入了通知渠道,其允许您为要显示的每种通知类型创建用户可自定义的渠道.用户界面将通知渠道称之为通知类别. 针 ...

  4. android 7.0适配(总结)

    file_paths.xml <?xml version="1.0" encoding="utf-8"?><paths xmlns:andro ...

  5. Android 7.0 适配

    extends:http://www.jianshu.com/p/56b9fb319310http://blog.csdn.net/chay_chan/article/details/57083383

  6. Android权限管理之Android 6.0运行时权限及解决办法

    前言: 今天还是围绕着最近面试的一个热门话题Android 6.0权限适配来总结学习,其实Android 6.0权限适配我们公司是在今年5月份才开始做,算是比较晚的吧,不过现在Android 6.0以 ...

  7. Android 7.0 出现 ”FileUriExposedException“ 和 ”解析包出现错误“ 异常的解决办法

    问题1 :android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/com.xxx.xxx.xxx.rel ...

  8. Android5.0和Android6.0适配

    gradle配置项 compileSdkVersion 用哪个 Android SDK 版本编译你的应用.因此我们强烈推荐总是使用最新的 SDK 进行编译.在现有代码上使用新的编译检查可以获得很多好处 ...

  9. Android 8.0系统的应用图标适配

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 参考资料<一起来学习Android 8.0系统的应用图标适配吧>中已经讲得很清楚了,这里我只是简单总结下.详情的内容请阅 ...

随机推荐

  1. 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第1节 Scanner类_5-练习二_键盘输入三个数字

    思路分析: 获取前两个数字中的看最大值,有多重写法,这里先演示第一种.三元运算符的方式  

  2. 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第8节 Math类_19_Math练习:小学数学真题

    题目 画数轴 解题思路 强转成int类型就会舍弃小数位数 输出最终的数量 如果用Math.ceil的方式的话

  3. 16/7/7_PHP-访问控制

    访问控制 前面的小节,我们已经接触过访问控制了,访问控制通过关键字public,protected和private来实现.被定义为公有的类成员可以在任何地方被访问.被定义为受保护的类成员则可以被其自身 ...

  4. Session设置

    from django.shortcuts import render, redirect from django import views # Create your views here. fro ...

  5. 《深入浅出WPF》学习总结之学前知识

    一个WPF应用的组成结构 Properties:存放程序资源(图标.图片.静态字符串等) References:标记了当前项目需要引用哪些其他项目App.xmal:程序的主体.在Windows系统里, ...

  6. mysql树查询、递归查询

    关键词:mysql树查询,mysql递归查询 转自:http://www.cnblogs.com/c-h-y/p/9420726.html 之前一直用的是Oracle,对于树形查询可以使用start ...

  7. 华为交换机SOCK CPU占用率高处理方法

    问题截图: 解决方法: cpu-defend policy cpu auto-defend enable auto-defend attack-packet sample 5 auto-defend ...

  8. [Codeforces 1191D] Tokitsukaze, CSL and Stone Game(博弈论)

    [Codeforces 1191D] Tokitsukaze, CSL and Stone Game(博弈论) 题面 有n堆石子,两个人轮流取石子,一次只能从某堆里取一颗.如果某个人取的时候已经没有石 ...

  9. docker pull使用 代理

    [root@fdfs- ~]# cat /usr/lib/systemd/system/docker.service [Unit] Description=Docker Application Con ...

  10. Xilinx源语-------FDRE

    1.源语---FDRE FDRE代表一个单D型触发器,含的有五个信号分别为:  数据(data,D).时钟使能(Clock enable,CE).时钟(Clock).同步复位(synchronous ...