Android 6.0 最简单的权限获取方法 RxPermition EasyPermition
来源:互联网 发布:sql server 物化视图 编辑:程序博客网 时间:2024/06/02 02:21
Easypermissions简化了Android M的运行时权限的申请、结果处理、判断等步骤。
1、相关文档
官方文档
https://github.com/googlesamples/easypermissions
运行时权限官方文档解释:
https://developer.android.com/training/permissions/requesting.html
2 为什么使用Easypermissions
随着Android 6.0发布以及普及,我们开发者所要应对的主要就是新版本SDK带来的一些变化,首先关注的就是权限机制的变化。对于6.0以下的权限及在安装的时候,根据权限声明产生一个权限列表,用户只有在同意之后才能完成app的安装,造成了我们想要使用某个app,就要默默忍受其一些不必要的权限(比如是个app都要访问通讯录、短信等)。而在6.0以后,我们可以直接安装,当app需要我们授予不恰当的权限的时候,我们可以予以拒绝(比如:单机的象棋对战,请求访问任何权限,我都是不同意的)。当然你也可以在设置界面对每个app的权限进行查看,以及对单个权限进行授权或者解除授权。
新的权限机制更好的保护了用户的隐私,Google将权限分为两类,一类是Normal Permissions,这类权限一般不涉及用户隐私,是不需要用户进行授权的,比如手机震动、访问网络等;另一类是Dangerous Permission,一般是涉及到用户隐私的,需要用户进行授权,比如读取sdcard、访问通讯录等。
Normal and Dangerous Permissions解释:
https://developer.android.com/guide/topics/security/permissions.html#normal-dangerous
- Normal Permissions如下
-
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
-Dangerous Permissions:
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
3 如何使用
项目github地址:https://github.com/googlesamples/easypermissions
首先,添加依赖:
dependencies {
compile ‘pub.devrel:easypermissions:0.3.0’
}
1、检查权限
String[] perms = {Manifest.permission.CAMERA, Manifest.permission.CHANGE_WIFI_STATE};if (EasyPermissions.hasPermissions(this, perms)) { //... } else { //...}...
如果不知道权限名称的可以到Manifest.permission这个类里面查找:
public static final class permission { public static final String ACCESS_CHECKIN_PROPERTIES = "android.permission.ACCESS_CHECKIN_PROPERTIES"; public static final String ACCESS_COARSE_LOCATION = "android.permission.ACCESS_COARSE_LOCATION"; public static final String ACCESS_FINE_LOCATION = "android.permission.ACCESS_FINE_LOCATION"; public static final String ACCESS_LOCATION_EXTRA_COMMANDS = "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"; public static final String ACCESS_NETWORK_STATE = "android.permission.ACCESS_NETWORK_STATE"; //....... }
2、申请权限
@AfterPermissionGranted(RC_CAMERA_AND_WIFI)private void methodRequiresTwoPermission() { String[] perms = {Manifest.permission.CAMERA, Manifest.permission.CHANGE_WIFI_STATE}; 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_wifi_rationale), RC_CAMERA_AND_WIFI, perms); }}
3、实现EasyPermissions.PermissionCallbacks接口,直接处理权限是否成功申请
public class MainActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); // Do something after user returned from app settings screen, like showing a Toast. } @Override public void onPermissionsGranted(int requestCode, List<String> perms) { //权限已经受理 } @Override public void onPermissionsDenied(int requestCode, List<String> perms) { // 权限被拒绝 //如果被永远拒绝的话只能到设置页面设置,此时可以通过以下代码进行申请 if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) { new AppSettingsDialog.Builder(this).build().show(); } }
4、总结
Easypermissions主要简化了对权限申请结果的处理和判断,直接以接口的方式回调处理结果。不需要再自行进行处理。开始动手尝试一下吧。
- Android 6.0 最简单的权限获取方法 RxPermition EasyPermition
- Android 6.0 最简单的权限获取方法 RxPermition EasyPermition
- Android中的运行时权限处理,最简单的方法。
- Android 6.0动态获取权限,根据官方总结的最简单有效解决方法
- Android 笔记:获取SH1和MD5最简单的方法
- Android 模拟器 获得 root权限(目前发现的最简单的方法)
- Spring获取bean的最简单方法
- Android 模拟器 获得 root权限(目前发现最简单的方法)
- <Android>--6.0版本获取运行时的权限方法
- Android应用程序获取ROOT权限的方法
- android 模拟器获取root权限的方法
- 关于android获取root权限的方法
- Android应用程序获取ROOT权限的方法
- Android应用程序获取ROOT权限的方法
- Android应用程序获取ROOT权限的方法
- Android 6.0权限的获取
- Android 最简单的获取系统时间并且格式化的方法
- android studio获取MD5和SHA1值最简单方便的方法
- 6-1 输出所有大于平均值的数
- DokuWiki 命名空间管理
- 【数据结构与算法】归并排序
- ueditor编辑器asp版不能上传图片的解决方法(800a0046)
- servlet-环境
- Android 6.0 最简单的权限获取方法 RxPermition EasyPermition
- Java byte数据类型
- oc中的枚举
- orcale数据库的简单操作语句
- Java温故而知新-杨辉三角形
- [c++]求两个正整数的最大公约数
- Java short数据类型
- 【LeetCode】508. Most Frequent Subtree Sum
- 递推递归练习 G