Android EasyPermission优雅地实现动态权限申请
2017-12-12 12:24
549 查看
Android EasyPermission优雅地实现动态权限申请
Google开源的动态权限适配库,用起来比较简洁和清晰,总体还不错,如果喜欢链式调用的就用 RxPermission 或者 AndPermission 都是不错的选择。一、权限等级和权限组介绍
权限主要分为 normal 、dangerous、signature 和 signatureOrSystem四个等级,一般情况下,我们只需要了解前两种权限的使用就可以了,后面的是属于系统级签名的权限。二、普通权限和危险权限
普通权限只需要在AndroidMenifest.xml文件中申请即可,危险权限需要到代码中进行动态申请一般是成对成组地去申请,所以叫权限组普通权限对应表:
Name | 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_IGNORE_BATTERY_OPTIMIZATIONS | 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 |
权限组 | 权限 |
---|---|
CALENDAR | READ_CALENDAR WRITE_CALENDAR |
CAMERA | CAMERA |
CONTACTS | READ_CONTACTS WRITE_CONTACTS GET_ACCOUNTS |
LOCATION | ACCESS_FINE_LOCATION ACCESS_COARSE_LOCATION |
MICROPHONE | RECORD_AUDIO |
PHONE | READ_PHONE_STATE CALL_PHONE READ_CALL_LOG WRITE_CALL_LOG ADD_VOICEMAIL USE_SIP PROCESS_OUTGOING_CALLS |
SENSORS | BODY_SENSORS |
SMS | SEND_SMS RECEIVE_SMS READ_SMS RECEIVE_WAP_PUSH RECEIVE_MMS |
STORAGE | READ_EXTERNAL_STORAGE WRITE_EXTERNAL_STORAGE |
1.添加依赖库
compile 'pub.devrel:easypermissions:1.0.1'
2.定义需要动态申请的权限集合
/** * 需要申请的权限数组 */ protected String[] needPermissions = { Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, };
3.重写回调方法
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); // Forward results to EasyPermissions EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); }
4.授权成功和失败的回调
@AfterPermissionGranted(RC_CAMERA_AND_LOCATION) private void methodRequiresTwoPermission() { String[] perms = {Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION}; if (EasyPermissions.hasPermissions(this, perms)) { // Already have permission, do the thing // ... } else { // Do not have permissions, request them now EasyPermissions.requestPermissions(this, getString(R.string.camera_and_location_rationale), RC_CAMERA_AND_LOCATION, perms); } }
第二种写法:
EasyPermissions.requestPermissions( new PermissionRequest.Builder(this, RC_CAMERA_AND_LOCATION, perms) .setRationale(R.string.camera_and_location_rationale) .setPositiveButtonText(R.string.rationale_ask_ok) .setNegativeButtonText(R.string.rationale_ask_cancel) .setTheme(R.style.my_fancy_style) .build());
重写授权成功和失败的回调
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); // Forward results to EasyPermissions EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); }
@Override
public void onPermissionsGranted(int requestCode, List<String> list) {
// Some permissions have been granted
// ...
}
@Override
public void onPermissionsDenied(int requestCode, List<String> list) {
// Some permissions have been denied
// ...
}
更多使用请参考:
https://github.com/googlesamples/easypermissions另外再推荐几个不错的处理动态权限的开源库:
前面的star基本都是几k,后面的都是几百的starhttps://github.com/tbruyelle/RxPermissions
https://github.com/hongyangAndroid/MPermissions
https://github.com/yanzhenjie/AndPermission
https://github.com/permissions-dispatcher/PermissionsDispatcher
https://github.com/jokermonn/permissions4m
https://github.com/lovedise/PermissionGen
https://github.com/k0shk0sh/PermissionHelper
支持Kotlin:https://github.com/googlesamples/android-RuntimePermissions
https://github.com/mylhyl/AndroidAcp
https://github.com/ParkSangGwon/TedPermission
https://github.com/yewei02538/HiPermission
https://github.com/PEXPlugins/PermissionsEx
https://github.com/dfqin/PermissionGrantor
更多Google官网文档关于动态权限的说明
https://developer.android.com/guide/topics/security/permissions.htmlhttps://developer.android.com/training/permissions/requesting.html
https://developer.android.com/training/permissions/best-practices.html
相关文章推荐
- Android动态申请权限的方法和shouldShowRequestPermissionRationale方法的含义
- android 动态权限申请 rxjava2实现方法
- Android 6.0 动态权限申请简单简洁优雅的处理方式
- Android M动态申请获取权限android.permission.READ_PHONE_STATE
- 使用 easypermission 来简化代码,实现Android动态权限申请
- Android开发之利用注解简单实现动态权限申请
- android 6.0动态弹框申请权限实现
- Android M动态申请获取权限android.permission.READ_PHONE_STATE
- Android M动态申请获取权限android.permission.READ_PHONE_STATE
- Android开发-优雅的实现动态图片排版(类似微信图片展示效果)
- Android 6.0权限动态申请
- Android 6.0 动态权限申请
- Android之动态申请权限(API23以上需求)
- Android 6.0 动态权限申请详解
- Android 6.0 动态权限申请
- Android 新安全机制之动态权限申请
- Android 6.0动态权限申请--事例代码
- Android WindowManager悬浮窗:不需要申请权限实现悬浮
- android简单学习6.0的动态权限申请
- Android permission 动态申请、授权