Android 6.0申请动态权限

从Android 6.0开始,敏感权限需要在使用时动态申请,用户可选择拒绝或关闭授权。权限分为normal和dangerous两类,dangerous权限涉及用户隐私,需运行时请求。检查权限、请求权限及处理响应是关键步骤。

1、动态权限
从Android6.0(API23)开始,对系统权限做了非常大的改变,6.0之前用户安装App的时候,只是把App需要的使用的权限统一列出来让用户看一下,App安装后都可以访问这些权限。从6.0开始,一些敏感权限需要在使用的时候动态申请,同时用户可以选择拒绝授权访问这些权利,已授予过的权限,用户也可以去设置界面去关闭授权。对于用户来说提高了安全性,可以防止一些应用恶意访问用户数据,但对开发来说,也增加了不少的工作量,这块不做适配处理的话,App在访问权限的时候容易出现崩溃。

2、权限主要分为normal、dangerous,即正常权限和危险权限。

正常权限
正常权限一般不涉及用户隐私,是无须用户进行授权的,比如手机振动、访问网络等,这些权限只需在AndroidManifest中简单声明就好,安装时就授权,无须每次使用时都检查权限,而且用户不能取消以上授权;
以下是正常权限:
android.permission.ACCESSLOCATIONEXTRACOMMANDS 

android.permission.ACCESSNETWORKSTATE 

android.permission.ACCESSNOTIFICATIONPOLICY 

android.permission.ACCESSWIFISTATE 

android.permission.ACCESSWIMAXSTATE 

android.permission.BLUETOOTH 

android.permission.BLUETOOTHADMIN 

android.permission.BROADCASTSTICKY 

android.permission.CHANGENETWORKSTATE 

android.permission.CHANGEWIFIMULTICASTSTATE 

android.permission.CHANGEWIFISTATE 

android.permission.CHANGEWIMAXSTATE 

android.permission.DISABLEKEYGUARD 

android.permission.EXPANDSTATUSBAR 

android.permission.FLASHLIGHT 

android.permission.GETACCOUNTS 

android.permission.GETPACKAGESIZE 

android.permission.INTERNET 

android.permission.KILLBACKGROUNDPROCESSES 

android.permission.MODIFYAUDIOSETTINGS 

android.permission.NFC 

android.permission.READSYNCSETTINGS 

android.permission.READSYNCSTATS 

android.permission.RECEIVEBOOTCOMPLETED 

android.permission.REORDERTASKS 

android.permission.REQUESTINSTALLPACKAGES 

android.permission.SETTIMEZONE 

android.permission.SETWALLPAPER 

android.permission.SETWALLPAPERHINTS 

android.permission.SUBSCRIBEDFEEDSREAD 

android.permission.TRANSMITIR 

android.permission.USEFINGERPRINT 

android.permission.VIBRATE 

android.permission.WAKELOCK 

android.permission.WRITESYNCSETTINGS 

com.android.alarm.permission.SETALARM 

com.android.launcher.permission.INSTALLSHORTCUT 

com.android.launcher.permission.UNINSTALLSHORTCUT

危险权限
危险权限涵盖应用需要涉及用户隐私信息的数据或资源,或者可能对用户存储的数据或其他应用的操作产生影响的区域。例如读取用户联系人、读取Sdcard,在6.0以上系统中,需要在运行时明确向用户申请权限。
以下是Dangerous Permission,是以分组的形式给出的
group:android.permission-group.CONTACTS
  permission:android.permission.WRITECONTACTS
  permission:android.permission.GET
ACCOUNTS 
  permission:android.permission.READ_CONTACTS

group:android.permission-group.PHONE
  permission:android.permission.READCALLLOG
  permission:android.permission.READPHONESTATE 
  permission:android.permission.CALL
PHONE
  permission:android.permission.WRITE
CALLLOG
  permission:android.permission.USE
SIP
  permission:android.permission.PROCESS_OUTGOINGCALLS
  permission:com.android.voicemail.permission.ADD
VOICEMAIL

group:android.permission-group.CALENDAR
  permission:android.permission.READCALENDAR
  permission:android.permission.WRITE
CALENDAR

group:android.permission-group.CAMERA
  permission:android.permission.CAMERA

group:android.permission-group.SENSORS
  permission:android.permission.BODY_SENSORS

group:android.permission-group.LOCATION
  permission:android.permission.ACCESSFINELOCATION
  permission:android.permission.ACCESSCOARSELOCATION

group:android.permission-group.STORAGE
  permission:android.permission.READEXTERNALSTORAGE
  permission:android.permission.WRITEEXTERNALSTORAGE

group:android.permission-group.MICROPHONE
  permission:android.permission.RECORD_AUDIO

group:android.permission-group.SMS
  permission:android.permission.READSMS
  permission:android.permission.RECEIVE
WAPPUSH
  permission:android.permission.RECEIVEMMS
  permission:android.permission.RECEIVE
SMS
  permission:android.permission.SEND
SMS
  permission:android.permission.READCELLBROADCASTS

3、运行时请求权限

3.1、检查权限

应用每次需要危险权限时,都要判断应用目前是否有该权限。兼容库中已经做了封装,只需要通过下面代码即可:

int permissionCheck = ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITECALENDAR);
如果有权限则返回PackageManager.PERMISSION
GRANTED,否则返回PackageManager。PERMISSION_DENIED。

3.2、请求权限

当应用需要某个权限时,可以申请获取权限,这时会有弹出一个系统标准Dialog提示申请权限,此Diolog不能定制,用户同意或者拒绝后会通过方法onRequestPermissionsResult()返回结果。 ActivityCompat.requestPermissions(thisActivity, new String[]{
  Manifest.permission.READCONTACTS
},
REQUEST
CODE);
3.3、处理权限请求响应

当用户处理权限请求后,系统会回调申请权限的Activity的onRequestPermissionsResult()方法,只需要覆盖此方法,就能获得返回结果。
@Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值