Android常用框架----权限管理系列框架

本文详细介绍了Android 6.0权限适配问题,包括权限分类、动态适配的必要性、如何动态申请权限以及在实际使用中应注意的细节。重点讲解了敏感权限的实时检查和处理策略,并列举了几款常用的权限管理库供开发者选择。
摘要由CSDN通过智能技术生成

上篇介绍了事件总线系列框架(http://blog.csdn.net/siwenyy/article/details/75041216),接下来讲讲大家关注的权限问题。


在Android开发中,我们应该遇到过安装app到6.0系统的手机上应用突然一闪而过,查看log,导致崩溃的原因java.lang.SecurityException: Permission Denial。接下来就讲讲6.0权限适配问题。


一、权限分类

普通权限:只需要在AndroidManifest.xml中简单声明这些权限就好,安装时就授权。不需要每次使用时都检查权限,而且用户不能取消以上授权。

  
  
  
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

危险权限:所有危险的Android系统权限属于权限组,如果APP运行在Android 6.0 (API level 23)或者更高级别的设备中,而且targetSdkVersion>=23时,系统将会自动采用动态权限管理策略,如果你在涉及到特殊权限

操作时没有做动态权限的申请将会导致App崩溃。

注意事项:

1、必须也在Manifest中申明,否则申请时不提使用用户,直接回调开发者权限被拒绝。
2、同一个权限组的任何一个权限被授权了,这个权限组的其他权限也自动被授权。
3、申请某一个权限的时候系统弹出的Dialog是对整个权限组的说明,而不是单个权限。

   
   
   
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 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 通过gps获取定位权限
permission:android.permission.ACCESS_COARSE_LOCATION 通过WiFi和移动基站获取定位权限
 
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 接收wap push信息
permission:android.permission.RECEIVE_MMS
permission:android.permission.RECEIVE_SMS 接收短信
permission:android.permission.SEND_SMS 发送短信
permission:android.permission.READ_CELL_BROADCASTS 获取小区广播

特殊权限 (分在危险权限中)
比如: 系统级别对话框:SYSTEM_ALERT_WINDOW ,修改系统设置:WRITE_SETTINGS 这2个特殊权限,我们需要在startActivityForResult里调用即可,这2个权限一般是不会用到,会用到的地方要么是黑科技或者是反用户体验的场景。

二、需了解的问题
1、为什么6.0需要权限适配 
6.0之前Android的权限都是在安装的时候授予的,6.0之后,为了简化安装流程,并且方便用户控制权限,Android允许在运行的时候动态控制权限。对于开发而言就是将targetSdkVersion设置为23,当运行在Android 6.0 +的手机上时,就会调用6.0相关的API,达到动态控制权限的目的。但是,如果仅仅是将targetSdkVersion设置为23,而在代码层面没有针对Android 6.0做适配,就可能在申请系统服务的时候,由于权限不足,引发崩溃。

2、什 么权限需要动态适配

并非所有的权限都需要动态申请,Android6.0将权限分为两种,普通权限跟敏感(危险)权限,普通权限是不需要动态申请的,但是敏感权限需要动态申请。


3、怎样动态适配权限

对于敏感权限的适配有一个原则,那就是实时检查,因为权限随时可能被回收,比如用户可以在设置里面把权限给取消,但是APP并不一定知道,因此每次都需要检查,一旦没有,就需要请求,之后,根据返回结果处理后续逻辑。


三、简单使用


以打电话为例

     
     
     
package com.xiaolajiao.linkdemo.permissiondemo;
 
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值