前言
从 Android 6.0(API 级别 23)开始,用户开始在应用运行时向其授予权限,而不是在应用安装时授予。所以如果你的应用使用到了一些危险权限,就必须在AndroidManifest.xml 中静态地声明需要用到的权限,并在使用到该功能时要动态的申请,否则在调用到相应权限功能时候,会抛出 SecurityException异常。所以本文探讨一下动态权限的申请的正确流程,并把它封装成一个库,简化了申请过程。
权限的分类
在讲解之前,先看一下android权限的分类,android权限分为四类,如下:
1、普通权限
普通权限也叫正常权限,它不需要动态申请,你只需要在用到它的时候在AndroidManifest.xml 中静态地声明,然后系统在app运行时就会自动的授予该app相应的权限。这类权限主要在你的app想要接触app沙盒外的数据或资源的时用到,它不会涉及到系统的操作,也不会泄漏或篡改用户的隐私数据。如下:
ACCESS_LOCATION_EXTRA_COMMANDS
ACCESS_NETWORK_STATE
ACCESS_NOTIFICATION_POLICY
ACCESS_WIFI_STATE
BLUETOOTH
BLUETOOTH_ADMIN
BROADCAST_STICKY
CHANGE_NETWORK_STATE
CHANGE_WIFI_MULTICAST_STATE
CHANGE_WIFI_STATE
DISABLE_KEYGUARD
EXPAND_STATUS_BAR
FOREGROUND_SERVICE