转载请注明出处 http://blog.csdn.net/pyfysf/article/details/78204395

Android 6.0(API 级别 23)开始,在应用运行时向其授予权限,而不是在应用安装时授予。这样可以让用户对应用的功能进行更多控制;

系统权限分为两类:正常权限和危险权限:


正常权限不会直接给用户隐私权带来风险。如果你的应用在其清单中列出了正常权限,系统将自动授予该权限。


危险权限会授予应用访问用户隐私数据的权限。如果你列出了危险权限,则用户必须明确批准您的应用使用这些权限。


注:从 Android 6.0(API 级别 23)开始,用户可以随时从任意应用调用权限,即使应用面向较低的 API 级别也可以调用。无论您的应用面向哪个 API 级别,您都应对应用进行测试,以验证它在缺少需要的权限时行为是否正常。

  • 正常权限
  1. NFC
  2. READ_SYNC_SETTINGS
  3. READ_SYNC_STATS
  4. RECEIVE_BOOT_COMPLETED
  5. REORDER_TASKS
  6. REQUEST_INSTALL_PACKAGES
  7. SET_ALARM
  8. SET_TIME_ZONE
  9. SET_WALLPAPER
  10. SET_WALLPAPER_HINTS
  11. TRANSMIT_IR
  12. UNINSTALL_SHORTCUT
  13. USE_FINGERPRINT
  14. VIBRATE
  15. WAKE_LOCK
  16. WRITE_SYNC_SETTINGS
  17. ACCESS_LOCATION_EXTRA_COMMANDS
  18. ACCESS_NETWORK_STATE
  19. ACCESS_NOTIFICATION_POLICY
  20. ACCESS_WIFI_STATE
  21. BLUETOOTH
  22. BLUETOOTH_ADMIN
  23. BROADCAST_STICKY
  24. CHANGE_NETWORK_STATE
  25. CHANGE_WIFI_MULTICAST_STATE
  26. CHANGE_WIFI_STATE
  27. DISABLE_KEYGUARD
  28. EXPAND_STATUS_BAR
  29. GET_PACKAGE_SIZE
  30. INSTALL_SHORTCUT
  31. INTERNET
  32. KILL_BACKGROUND_PROCESSES
  33. MODIFY_AUDIO_SETTINGS
  • 危险权限
  1. group:android.permission-group.CONTACTS
  2. permission:android.permission.WRITE_CONTACTS
  3. permission:android.permission.GET_ACCOUNTS
  4. permission:android.permission.READ_CONTACTS
  5. group:android.permission-group.PHONE
  6. permission:android.permission.READ_CALL_LOG
  7. permission:android.permission.READ_PHONE_STATE
  8. permission:android.permission.CALL_PHONE
  9. permission:android.permission.WRITE_CALL_LOG
  10. permission:android.permission.USE_SIP
  11. permission:android.permission.PROCESS_OUTGOING_CALLS
  12. permission:com.android.voicemail.permission.ADD_VOICEMAIL
  13. group:android.permission-group.CALENDAR
  14. permission:android.permission.READ_CALENDAR
  15. permission:android.permission.WRITE_CALENDAR
  16. group:android.permission-group.CAMERA
  17. permission:android.permission.CAMERA
  18. group:android.permission-group.SENSORS
  19. permission:android.permission.BODY_SENSORS
  20. group:android.permission-group.LOCATION
  21. permission:android.permission.ACCESS_FINE_LOCATION
  22. permission:android.permission.ACCESS_COARSE_LOCATION
  23. group:android.permission-group.STORAGE
  24. permission:android.permission.READ_EXTERNAL_STORAGE
  25. permission:android.permission.WRITE_EXTERNAL_STORAGE
  26. group:android.permission-group.MICROPHONE
  27. permission:android.permission.RECORD_AUDIO
  28. group:android.permission-group.SMS
  29. permission:android.permission.READ_SMS
  30. permission:android.permission.RECEIVE_WAP_PUSH
  31. permission:android.permission.RECEIVE_MMS
  32. permission:android.permission.RECEIVE_SMS
  33. permission:android.permission.SEND_SMS
  34. permission:android.permission.READ_CELL_BROADCASTS

因此,如果API 23及以上时,我们申请危险权限时,除了在清单文件配置,还要在代码中进行动态申请

我们可以自己去写代码进行权限代码申请,这种方法可以参考这样一篇博客

Android6.0及以上版本申请权限讲解

利用easypermissions进行权限申请

首先在app项目下的build.gradle中添加

  1. android {
  2. ....
  3. }
  4. repositories {
  5. maven {
  6. url "http://maven.aliyun.com/nexus/content/repositories/releases"
  7. }
  8. }
  9. dependencies {
  10. ....
  11. compile 'pub.devrel:easypermissions:1.0.1'
  12. }

这里以照相机权限和位置权限作为例子来讲解;

首先在清单文件(AndroidManifest.xml)中声明这两个属性


  1. <uses-permission android:name="android.permission.CAMERA"/>
  2. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

然后在Activity中重写:


  1. @Override
  2. public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
  3. super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  4. // Forward results to EasyPermissions
  5. EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
  6. }

然后我们就可以直接在Activity中书写请求权限的代码了

  1. //请求码
  2. @AfterPermissionGranted(RC_CAMERA_AND_LOCATION)
  3. private void methodRequiresTwoPermission() {
  4. String[] perms = {Manifest.permission.CAMERA,
  5. Manifest.permission.ACCESS_FINE_LOCATION};
  6. if (EasyPermissions.hasPermissions(this, perms)) {
  7. // Already have permission, do the thing
  8. // ...
  9. Toast.makeText(this, "已经授权", Toast.LENGTH_SHORT).show();
  10. //表明已经授权,可以进行用户授予权限的操作
  11. } else {
  12. // Do not have permissions, request them now
  13. //弹出一个对话框进行提示用户
  14. EasyPermissions.requestPermissions(this, "应用时需要照相机权限",
  15. RC_CAMERA_AND_LOCATION, perms);
  16. }
  17. }

第一次打开app之后,拒绝权限。第二次进入app就会弹出这个对话框

在oncreate方法中调用这个方法就可以了。

完整的MainActivity


  1. public class MainActivity extends AppCompatActivity {
  2. private static final int RC_CAMERA_AND_LOCATION = 100;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. methodRequiresTwoPermission();
  8. }
  9. @Override
  10. public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
  11. super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  12. // Forward results to EasyPermissions
  13. EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
  14. }
  15. @AfterPermissionGranted(RC_CAMERA_AND_LOCATION)
  16. private void methodRequiresTwoPermission() {
  17. String[] perms = {Manifest.permission.CAMERA,
  18. Manifest.permission.ACCESS_FINE_LOCATION};
  19. if (EasyPermissions.hasPermissions(this, perms)) {
  20. // Already have permission, do the thing
  21. // ...
  22. Toast.makeText(this, "已经授权", Toast.LENGTH_SHORT).show();
  23. } else {
  24. // Do not have permissions, request them now
  25. EasyPermissions.requestPermissions(this, "应用时需要照相机权限",
  26. RC_CAMERA_AND_LOCATION, perms);
  27. }
  28. }
  29. }

easypermissions的github地址,更多详细代码点击这里

easypermissions的基本使用的更多相关文章

  1. android 权限库EasyPermissions

    文章链接:https://mp.weixin.qq.com/s/H63Sn03xV0JoINXB4SWWKA 众所周知,在android 6.0之后,如果应用程序需要危险权限,则用户必须明确向应用授予 ...

  2. EasyPermissions的流程

    在app的build.gradle文件的dependencies中,添加依赖: implementation 'pub.devrel:easypermissions:1.3.0' import and ...

  3. Android6.0------权限申请~easypermissions

    前面写了Android6.0权限介绍和权限单个,多个申请,用的是纯Java代码,本文主要说的是借助第三方库来实现权限申请. 借助第三方库 easypermissions来申请6.0权限,Google官 ...

  4. 运行时权限请求框架easypermissions

    前言 之前使用过AndPermission权限申请库,当开发者执行有权限的代码发生异常时,AndPermission会抓到异常并回调到失败中,这里要注意的是会抓到任何异常,不仅仅是没有权限时的异常. ...

  5. Android开源项目-Easypermissions

    Easypermissions简化了Android M的运行时权限的申请.结果处理.判断等步骤. 1 相关文档 官方文档: https://github.com/googlesamples/easyp ...

  6. Android框架式编程之EasyPermissions

    EasyPermission库是一个谷歌官方提供的简化基本的系统权限逻辑的库,可用于在Android M或者更高版本上. 官方项目地址:https://github.com/googlesamples ...

  7. easypermissions拒绝权限后闪退。 java.lang.NoSuchMethodError: No virtual method isStateSaved()Z in class Landroid/support/v4/app/FragmentManager

    Process: com.tazan.cd.streetlight, PID: 18825 java.lang.NoSuchMethodError: No virtual method isState ...

  8. 【Android开发】EasyPermissions 请求权限

    安卓6.0以后,开发应用的时候,仅在AndroidManifest.xml中申请权限已经不可以了,需要在代码中动态申请. 现在看一个google推出的机制:EasyPermissions 引入步骤: ...

  9. 一行代码解决Android M新的运行时权限问题

    Android M运行时权限是个啥东西 啥是运行时权限呢?Android M对权限管理系统进行了改版,之前我们的App需要权限,只需在manifest中申明即可,用户安装后,一切申明的权限都可来去自如 ...

随机推荐

  1. Lucene Index Search

    转发自:  https://my.oschina.net/u/3777556/blog/1647031 什么是Lucene?? Lucene 是 apache 软件基金会发布的一个开放源代码的全文检索 ...

  2. Delphi中无边框窗体应用程序使任务栏右键菜单有效的方法

    最近在Delphi开发中用到了无边框窗体显示时,无法在任务栏使用右键弹出菜单的情况,经过整理,通过以下方法可以使右键菜单出现: procedure Tfrm_Base.InitSysMenu;var  ...

  3. 10秒完成Linux系统pip在线安装

    对于Python开发攻城狮及系统运维攻城狮来说,pip的安装那是必不可少的一个过程.鉴于网上很多安装过程写得过于复杂,本人根据pip官方手册总结了以下最为快捷的安装方式,只需要2步操作. curl h ...

  4. play框架之ORM

    初次接触play2,采用的ebeans作为ORM框架.网上的资料并不多,总结如下: 数据的查询可以放在model类里,也可以放在controllers里面,我更倾向于后者,感觉数据流比较完整,好理解, ...

  5. 向HashMap中添加1000个元素,设置new HashMap()值为多少合适?

    在已知元素容量的情况下,为了尽量减少碰撞增加查询效率,应该尽量选择较大数的同时避免资源浪费. HashMap底层通过hash值来计算索引位置的源码: 1.重新计算hash值 static final ...

  6. Hexo+NexT(三):Next主题配置详解

    阅读本篇之前,假定读者已经有了Node.js的基础,如需要补充Node.js知识的,请自行百度. Hexo是在Node.js框架下的一个项目,利用Node.js提供的强大功能,完成从Markdown到 ...

  7. spring 5.x 系列第19篇 ——spring简单邮件、附件邮件、内嵌资源邮件、模板邮件发送 (xml配置方式)

    源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.说明 1.1 项目结构说明 邮件发送配置文件为springApplic ...

  8. 【转】JDK 内存参数含义

    Eclipse崩溃,错误提示: MyEclipse has detected that less than 5% of the 64MB of Perm  Gen (Non-heap memory) ...

  9. 【前端优化】js图片懒加载及优化

    一.前言 为啥要对图片使用懒加载?我们首先来聊聊这个问题,对于页面来说架子啊速度影响着最大的就是图片,一张普通的图片可以达到4-5M的大小,而代码压缩也就只有几十KB.当页面图片过多的时候,页面加载速 ...

  10. Java基础中字符串与字符的注意点!

    在Java中,字符的表达与字符串的表达是不一样的!话不多说,直接上代码!!! String  a="a"; char a='a'; 其中他们的引号是不一样的