追加:https://www.jianshu.com/p/c1219d1d2401

使用RXpermission申请动态权限更好用~~

 

Android6.0(API 23)以后,一些涉及敏感数据的权限申请需要动态申请了,不能直接在menifest添加就可以用了。

一、需要动态申请的权限

引用:http://blog.csdn.net/htwhtw123/article/details/76032997

所属权限组 权限
日历 READ_CALENDAR
日历 WRITE_CALENDAR
相机 CAMERA
联系人 READ_CONTACTS
联系人 WRITE_CONTACTS
联系人 GET_ACCOUNTS
位置 ACCESS_FINE_LOCATION
位置 ACCESS_COARSE_LOCATION
麦克风 RECORD_AUDIO
电话 READ_PHONE_STATE
电话 CALL_PHONE
电话 READ_CALL_LOG
电话 WRITE_CALL_LOG
电话 ADD_VOICEMAIL
电话 USE_SIP
电话 PROCESS_OUTGOING_CALLS
传感器 BODY_SENSORS
短信 SEND_SMS
短信 RECEIVE_SMS
短信 READ_SMS
短信 RECEIVE_WAP_PUSH
短信 RECEIVE_MMS
存储 READ_EXTERNAL_STORAGE
存储 WRITE_EXTERNAL_STORAGE

二、不需要动态申请的权限

引用:https://blog.csdn.net/chen969097157/article/details/78047596

ACCESS_LOCATION_EXTRA_COMMANDS 定位权限ACCESS_NETWORK_STATE 网络状态权限ACCESS_NOTIFICATION_POLICY 通知 APP通知显示在状态栏ACCESS_WIFI_STATE WiFi状态权限BLUETOOTH 使用蓝牙权限BLUETOOTH_ADMIN 控制蓝牙开关BROADCAST_STICKY 粘性广播CHANGE_NETWORK_STATE 改变网络状态CHANGE_WIFI_MULTICAST_STATE 改变WiFi多播状态,应该是控制手机热点(猜测)CHANGE_WIFI_STATE 控制WiFi开关,改变WiFi状态DISABLE_KEYGUARD 改变键盘为不可用EXPAND_STATUS_BAR 扩展bar的状态GET_PACKAGE_SIZE 获取应用安装包大小INTERNET 网络权限KILL_BACKGROUND_PROCESSES 杀死后台进程MODIFY_AUDIO_SETTINGS 改变音频输出设置NFC 支付READ_SYNC_SETTINGS 获取手机设置信息READ_SYNC_STATS 数据统计RECEIVE_BOOT_COMPLETED 监听启动广播REORDER_TASKS 创建新栈REQUEST_INSTALL_PACKAGES 安装应用程序SET_TIME_ZONE 允许应用程序设置系统时间区域SET_WALLPAPER 设置壁纸SET_WALLPAPER_HINTS 设置壁纸上的提示信息,个性化语言TRANSMIT_IR 红外发射USE_FINGERPRINT 指纹识别VIBRATE 震动WAKE_LOCK 锁屏WRITE_SYNC_SETTINGS 改变设置SET_ALARM 设置警告提示INSTALL_SHORTCUT 创建快捷方式UNINSTALL_SHORTCUT 删除快捷方式

三、使用EasyPermission库进行权限动态申请

1、导入easypermission库:

 compile 'pub.devrel:easypermissions:1.0.1'

2、动态申请权限

//所要申请的权限String[] permsLocation = {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION};if (EasyPermissions.hasPermissions(this, permsLocation )) {  //已经获取所要申请的权限,进行下一步处理} else {                    //没有获取,申请定位权限        EasyPermissions.requestPermissions(this,"请求获得设备定位权限", 1, permsLocation);     } }//Android 系统权限结果监听回调@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {     super.onRequestPermissionsResult(requestCode, permissions, grantResults);     //调用easypermission结果监听返回     EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);}//easypermission 权限结果监听回调@Overridepublic void onPermissionsGranted(int requestCode, List perms) {       }@Overridepublic void onPermissionsDenied(int requestCode, List perms) {} //EasyPermissions.onRequestPermissionsResult 源码 /**     * Handle the result of a permission request, should be called from the calling {@link     * Activity}'s {@link ActivityCompat.OnRequestPermissionsResultCallback#onRequestPermissionsResult(int,     * String[], int[])} method.     * 

* If any permissions were granted or denied, the {@code object} will receive the appropriate * callbacks through {@link PermissionCallbacks} and methods annotated with {@link * AfterPermissionGranted} will be run if appropriate. * * @param requestCode requestCode argument to permission result callback. * @param permissions permissions argument to permission result callback. * @param grantResults grantResults argument to permission result callback. * @param receivers an array of objects that have a method annotated with {@link * AfterPermissionGranted} or implement {@link PermissionCallbacks}. */ public static void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults, @NonNull Object... receivers) { // Make a collection of granted and denied permissions from the request. List granted = new ArrayList<>(); List denied = new ArrayList<>(); for (int i = 0; i < permissions.length; i++) { String perm = permissions[i]; if (grantResults[i] == PackageManager.PERMISSION_GRANTED) { granted.add(perm); } else { denied.add(perm); } } // iterate through all receivers for (Object object : receivers) { // Report granted permissions, if any. if (!granted.isEmpty()) { if (object instanceof PermissionCallbacks) { ((PermissionCallbacks) object).onPermissionsGranted(requestCode, granted); } } // Report denied permissions, if any. if (!denied.isEmpty()) { if (object instanceof PermissionCallbacks) { ((PermissionCallbacks) object).onPermissionsDenied(requestCode, denied); } } // If 100% successful, call annotated methods if (!granted.isEmpty() && denied.isEmpty()) { runAnnotatedMethods(object, requestCode); } } }

四、使用RxPermissions库:

RxPermissions git链接

五、自定义权限申请工具类

6.0以上动态申请权限工具类

更多相关文章

  1. Android文件存储--采用SharedPreferences保存用户偏好设置参数和
  2. Android(安卓)studio 安装 环境搭建
  3. Android解析HTML+android爬虫框架jsoup
  4. MPAndroidChart开源图表库(一)之饼状图
  5. ClipboardService(CBS)中的权限管理
  6. android APP字体大小,不随系统的字体大小变化而变化的方法
  7. Android(安卓)Permission 中文说明
  8. Android(安卓)Studio Checkout GitHub Error:cannot run program
  9. Android精通:TableLayout布局,GridLayout网格布局,FrameLayout帧布

随机推荐

  1. Android内存溢出
  2. android 获得listview里的控件的id
  3. Android(安卓)按钮控制ViewPager左右翻页
  4. Android6.0 PackageManagerService(PMS)-
  5. Android Studio 基础 之 如何取消使用 An
  6. Android屏蔽软键盘并且显示光标的实例详
  7. Android(安卓)Day08四大组件之服务Servic
  8. Connection to https://dl-ssl.google.co
  9. android小知识(1)
  10. Google宣布Android暂停开源