Android学习整理 - 系列


Android的权限机制从第一个版本就有了,一些软件,不管用不用的到这些权限,都先申请了再说。比如某企鹅,安装软件时可以看到它要了读取和发送信息的权限,嘿嘿嘿,话说要这权限干嘛,。。。。
然后Android针对这些问题,在Android 6.0(API23)时安卓加入了运行时权限,从而更好的保护了用户的隐私安全。

  • 就是用户不需要再安装软件的的时候一次性授权所有的权限,而是在软件使用过程中针对某一些权限进行申请,当然,一般情况下,拒绝权限不会退出程序(万恶的某博,不给手机通讯录打电话权限就退出),而是可以用别的功能。

  • 并不是所有的权限都要在运行时申请,这样得多麻烦。Android将权限分为了两类,1 普通权限,2 危险权限

普通权限就是说不会直接威胁到用户的安全和隐私。这些权限系统会自动授权,只要你声明了。
危险权限就是涉及用户隐私的。这些就要运行时动态申请了

普通权限和危险权限

  • Android系统有上百种权限,危险权限如下表,其他的就是普通权限了
危险权限和权限组

需要注意的是
表格中每个权限都属于一个权限组,要是申请了权限组的一个权限,那么该权限组的所有权限都会同时被授权。比如,申请了WRITE_EXTERNAL_STORAGE这个权限,那么和它在同一权限组的READ_EXTERNAL_STORAGE也会同时被授权!

不在这张表的权限可以直接在manifest文件里声明就行了(API23以上),不过平时为了兼容低版本,任何权限都要声明在manifest文件里,然后在Activity中针对API23以上申请运行时权限

动态申请运行时权限

一般情况下,比如,申请读写内存卡权限
Manifest.permission.WRITE_EXTERNAL_STORAGE

在Activity的onCreate里

 //判断权限够不够,不够就给        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {            ActivityCompat.requestPermissions(MainActivity.this, new String[]{                    Manifest.permission.WRITE_EXTERNAL_STORAGE            }, 1);        } else {            //权限够了这里处理逻辑            Log.d(TAG, "权限够了");        }

Activity里加上回调,控制权限申请窗口弹出来的的逻辑

//获取到权限回调方法    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[]permissions, @NonNull int[] grantResults) {        switch (requestCode) {            case 1:                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {                    //权限够了处理逻辑                    Log.d(TAG, "权限够了,逻辑");                } else {                    Toast.makeText(this, "权限不够,程序将退出", Toast.LENGTH_SHORT).show();                    finish();                }                break;            default:                break;        }    }

声明权限

然后运行,点击拒绝就直接finish()了

Gradle集成

推荐的开源库:
PermissionsDispatcher

中文版本: PermissionsDispatcher使用详解

使用:
使用PermissionsDispatcher轻松解决Android权限问题

另一种思路:
Android 6.0运行时权限简析及最佳实践


参考

系统权限

更多相关文章

  1. android 读写SD卡文件
  2. Android:SMS TEL MAIL 使用集合
  3. Android(安卓)经典蓝牙开发(二)
  4. Android(安卓)Binder通信机制学习(二)
  5. Android(安卓)5.0之后隐式声明Intent 启动Service引发的问题
  6. 屏幕适配那些事(02)Android逻辑像素刨根问底
  7. Android(安卓)NestedScrolling解决滑动冲突问题(3) - 项目实战
  8. Android(安卓)4.3 安全提升,Set-UID-Root 权限提升不再起作用,原先
  9. SEAndroid和普通android的区别

随机推荐

  1. Android获取SD卡视频音频文件
  2. Android(安卓)app的音视频播放功能
  3. Android(安卓)判断当前网络 wifi ctwap(c
  4. Android(安卓)Sqlite数据库中判断某个表
  5. android 监听短信和来电
  6. Android(安卓)创建与解析XML(五)—— Dom4j
  7. android 获取手机通讯录信息
  8. Android电池状态监听实例1(下)
  9. android的全屏和屏幕高宽的获取
  10. Android(安卓)Log统一管理类