安卓进阶第七篇之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代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout    
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"    
android:layout_width="match_parent"    
android:layout_height="match_parent"   >    
   <Button        
     android:text="打电话"        
    android:id="@+id/call_phone_btn"        
    android:layout_width="match_parent"        
    android:layout_height="45dp"/>
</RelativeLayout>

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

@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);
}

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,522评论 25 707
  • 一、概述 随着Android 7.0的发布,Android 6.0的普及速度很快就升上去了,目前Android 6...
    ListenerGao阅读 870评论 3 17
  • 发热放入Android6.0带来了新的权限管理方式,根据提供的官方文档,再加上自己的理解,做了以下汇总仅供大家伙参...
    PapiAP阅读 1,662评论 0 6
  • 人们的脾气都是变化多端的,其中愤怒的情绪最影响人。有时候觉得更年期的到来就是女人最痛苦的时候,因为这个时期意识到你...
    奇喻9在17阅读 138评论 0 0