android权限适配 简书,安卓进阶第七篇之6.0权限适配问题

Android M已经出来很久了,特别是从6.0开始增加了运行时权限RuntimePermission。如果你的项目targetSdkVersion支持到22以上(>=23),那就必须做权限适配,否侧app就会报权限错误,如果想app不报错,只需设置targetSdkVersion<=22,不过这也不是长久之计,权限适配迟早是要做的。

google将权限分为两类,一种是普通权限 ( Normal Permissions),一种是危险权限(Dangerous Permission)。

普通权限如下:

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

GET_PACKAGE_SIZE

INSTALL_SHORTCUT

INTERNET

KILL_BACKGROUND_PROCESSES

MODIFY_AUDIO_SETTINGS

NFC

READ_SYNC_SETTINGS

READ_SYNC_STATS

RECEIVE_BOOT_COMPLETED

REORDER_TASKS

REQUEST_INSTALL_PACKAGES

SET_ALARM

SET_TIME_ZONE

SET_WALLPAPER

SET_WALLPAPER_HINTS

TRANSMIT_IR

UNINSTALL_SHORTCUT

USE_FINGERPRINT

VIBRATE

WAKE_LOCK

WRITE_SYNC_SETTINGS

危险权限如下:

group:android.permission-group.CONTACTS

permission:android.permission.WRITE_CONTACTS

permission:android.permission.GET_ACCOUNTS

permission:android.permission.READ_CONTACTS

group:android.permission-group.PHONE

permission:android.permission.READ_CALL_LOG

permission:android.permission.READ_PHONE_STATE

permission:android.permission.CALL_PHONE

permission:android.permission.WRITE_CALL_LOG

permission:android.permission.USE_SIP

permission:android.permission.PROCESS_OUTGOING_CALLS

permission:com.android.voicemail.permission.ADD_VOICEMAIL

group:android.permission-group.CALENDAR

permission:android.permission.READ_CALENDAR

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.ACCESS_FINE_LOCATION

permission:android.permission.ACCESS_COARSE_LOCATION

group:android.permission-group.STORAGE

permission:android.permission.READ_EXTERNAL_STORAGE

permission:android.permission.WRITE_EXTERNAL_STORAGE

group:android.permission-group.MICROPHONE

permission:android.permission.RECORD_AUDIO

group:android.permission-group.SMS

permission:android.permission.READ_SMS

permission:android.permission.RECEIVE_WAP_PUSH

permission:android.permission.RECEIVE_MMS

permission:android.permission.RECEIVE_SMS

permission:android.permission.SEND_SMS

permission:android.permission.READ_CELL_BROADCASTS

我们可以看到,危险权限都是一组一组的,那么这对我们申请权限有什么影响呢?简单点说,如果你申请某一个组的权限(假如说这个组下有两个权限A和B),如果弹出的授权dialog你授予了A权限,但是拒绝了B权限,那么下次再次点击获取授权的时候,因为你已经授权了这个组下的A权限,那么系统会认为你已经授权了这个组下的所有权限,所以不再会弹出授权权限B的dialog。所以我们在申请授权的时候,尽量不要去使用申请组的权限,而是对每个危险权限进行正常的申请。

说了这么多了,该练练手了,关于权限适配,github上已经有很多大神写了封装库,我们可以直接使用,但我个人最喜欢的还是这位貌似韩国大神写的permissiongen(https://github.com/lovedise/PermissionGen ),使用也非常简单,直接在app gradle下添加 compile 'com.lovedise:permissiongen:0.0.6',然后同步一下,接下来就是在app中的使用了,也是非常方便,比如我们写一个按钮,点击去申请拨打电话的权限,xml代码如下:

xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/activity_main"

android:layout_width="match_parent"

android:layout_height="match_parent" >

android:text="打电话"

android:id="@+id/call_phone_btn"

android:layout_width="match_parent"

android:layout_height="45dp"/>

再来看看是怎么调用权限的:

@Override

public void onClick(View v) {

switch (v.getId()){

case R.id.call_phone_btn:

PermissionGen.needPermission(MainActivity.this,100,Manifest.permission.CALL_PHONE);

break;

}}

第二个参数100,就是我们请求的requestCode,第三个参数就是要请求的权限,再看看请求结果的返回:

@PermissionSuccess(requestCode = 100)

private void doCallPhoneSuccess() {

Toast.makeText(MainActivity.this, "请求授权成功", Toast.LENGTH_LONG).show();

}

@PermissionFail(requestCode = 100)

private void doCallPhoneError() {

Toast.makeText(MainActivity.this, "请求授权失败", Toast.LENGTH_LONG).show();

}

@Override

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

PermissionGen.onRequestPermissionsResult(MainActivity.this, requestCode, permissions, grantResults);

}

个人觉得作者已经封装的很好了,用起来很方便,也可以满足我们项目中的需求。(没什么技术含量,就当是自己的一个笔记吧。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值