goggle在Android6.0要求部分权限需要动态申请,直接下载AndroidManifest.xml中无效

  • 6.0权限的基本知识,以下是需要单独申请的权限,共分为9组,
  • 每组只要有一个权限申请成功了,就默认整组权限都可以使用了。
  1. group:android.permission-group.CONTACTS
  2. permission:android.permission.WRITE_CONTACTS
  3. permission:android.permission.GET_ACCOUNTS
  4. permission:android.permission.READ_CONTACTS
  5.  
  6. group:android.permission-group.PHONE
  7. permission:android.permission.READ_CALL_LOG
  8. permission:android.permission.READ_PHONE_STATE
  9. permission:android.permission.CALL_PHONE
  10. permission:android.permission.WRITE_CALL_LOG
  11. permission:android.permission.USE_SIP
  12. permission:android.permission.PROCESS_OUTGOING_CALLS
  13. permission:com.android.voicemail.permission.ADD_VOICEMAIL
  14.  
  15. group:android.permission-group.CALENDAR
  16. permission:android.permission.READ_CALENDAR
  17. permission:android.permission.WRITE_CALENDAR
  18.  
  19. group:android.permission-group.CAMERA
  20. permission:android.permission.CAMERA
  21.  
  22. group:android.permission-group.SENSORS
  23. permission:android.permission.BODY_SENSORS
  24.  
  25. group:android.permission-group.LOCATION
  26. permission:android.permission.ACCESS_FINE_LOCATION
  27. permission:android.permission.ACCESS_COARSE_LOCATION
  28.  
  29. group:android.permission-group.STORAGE
  30. permission:android.permission.READ_EXTERNAL_STORAGE
  31. permission:android.permission.WRITE_EXTERNAL_STORAGE
  32.  
  33. group:android.permission-group.MICROPHONE
  34. permission:android.permission.RECORD_AUDIO
  35.  
  36. group:android.permission-group.SMS
  37. permission:android.permission.READ_SMS
  38. permission:android.permission.RECEIVE_WAP_PUSH
  39. permission:android.permission.RECEIVE_MMS
  40. permission:android.permission.RECEIVE_SMS
  41. permission:android.permission.SEND_SMS
  42. permission:android.permission.READ_CELL_BROADCASTS
  • 以下是普通权限,只需要在AndroidManifest.xml中申请即可
  1. android.permission.ACCESS_LOCATION_EXTRA_COMMANDS
  2. android.permission.ACCESS_NETWORK_STATE
  3. android.permission.ACCESS_NOTIFICATION_POLICY
  4. android.permission.ACCESS_WIFI_STATE
  5. android.permission.ACCESS_WIMAX_STATE
  6. android.permission.BLUETOOTH
  7. android.permission.BLUETOOTH_ADMIN
  8. android.permission.BROADCAST_STICKY
  9. android.permission.CHANGE_NETWORK_STATE
  10. android.permission.CHANGE_WIFI_MULTICAST_STATE
  11. android.permission.CHANGE_WIFI_STATE
  12. android.permission.CHANGE_WIMAX_STATE
  13. android.permission.DISABLE_KEYGUARD
  14. android.permission.EXPAND_STATUS_BAR
  15. android.permission.FLASHLIGHT
  16. android.permission.GET_ACCOUNTS
  17. android.permission.GET_PACKAGE_SIZE
  18. android.permission.INTERNET
  19. android.permission.KILL_BACKGROUND_PROCESSES
  20. android.permission.MODIFY_AUDIO_SETTINGS
  21. android.permission.NFC
  22. android.permission.READ_SYNC_SETTINGS
  23. android.permission.READ_SYNC_STATS
  24. android.permission.RECEIVE_BOOT_COMPLETED
  25. android.permission.REORDER_TASKS
  26. android.permission.REQUEST_INSTALL_PACKAGES
  27. android.permission.SET_TIME_ZONE
  28. android.permission.SET_WALLPAPER
  29. android.permission.SET_WALLPAPER_HINTS
  30. android.permission.SUBSCRIBED_FEEDS_READ
  31. android.permission.TRANSMIT_IR
  32. android.permission.USE_FINGERPRINT
  33. android.permission.VIBRATE
  34. android.permission.WAKE_LOCK
  35. android.permission.WRITE_SYNC_SETTINGS
  36. com.android.alarm.permission.SET_ALARM
  37. com.android.launcher.permission.INSTALL_SHORTCUT
  38. com.android.launcher.permission.UNINSTALL_SHORTCUT
  1. 将targetSdkVersion设置为23,注意,如果你将targetSdkVersion设置为>=23,则必须按照Android谷歌的要求,动态的申请权限,如果你暂时不打算支持动态权限申请,则targetSdkVersion最大只能设置为22
  2. 在AndroidManifest.xml中申请你需要的权限,包括普通权限和需要申请的特殊权限。

开始申请权限,此处分为3部。

  • (1)检查是否由此权限checkSelfPermission(),如果已经开启,则直接做你想做的。

  • (2)如果未开启,则判断是否需要向用户解释为何申请权限shouldShowRequestPermissionRationale。

  • (3)如果需要(即返回true),则可以弹出对话框提示用户申请权限原因,用户确认后申请权限requestPermissions(),如果不需要(即返回false),则直接申请权限requestPermissions()。
    (这里是一部门代码,底部有比较完善的代码,整个demo可以在github中下载)。
  1. /**
  2. * Requests permission.
  3. *
  4. * @param activity
  5. * @param requestCode request code, e.g. if you need request CAMERA permission,parameters is PermissionUtils.CODE_CAMERA
  6. */
  7. public static void requestPermission(final Activity activity, final int requestCode, PermissionGrant permissionGrant) {
  8. if (activity == null) {
  9. return;
  10. }
  11.  
  12. Log.i(TAG, "requestPermission requestCode:" + requestCode);
  13. if (requestCode < 0 || requestCode >= requestPermissions.length) {
  14. Log.w(TAG, "requestPermission illegal requestCode:" + requestCode);
  15. return;
  16. }
  17.  
  18. final String requestPermission = requestPermissions[requestCode];
  19.  
  20. //如果是6.0以下的手机,ActivityCompat.checkSelfPermission()会始终等于PERMISSION_GRANTED,
  21. // 但是,如果用户关闭了你申请的权限(如下图,在安装的时候,将一些权限关闭了),ActivityCompat.checkSelfPermission()则可能会导致程序崩溃(java.lang.RuntimeException: Unknown exception code: 1 msg null),
  22. // 你可以使用try{}catch(){},处理异常,也可以判断系统版本,低于23就不申请权限,直接做你想做的。permissionGrant.onPermissionGranted(requestCode);
  23. // if (Build.VERSION.SDK_INT < 23) {
  24. // permissionGrant.onPermissionGranted(requestCode);
  25. // return;
  26. // }
  27.  
  28. int checkSelfPermission;
  29. try {
  30. checkSelfPermission = ActivityCompat.checkSelfPermission(activity, requestPermission);
  31. } catch (RuntimeException e) {
  32. Toast.makeText(activity, "please open this permission", Toast.LENGTH_SHORT)
  33. .show();
  34. Log.e(TAG, "RuntimeException:" + e.getMessage());
  35. return;
  36. }
  37.  
  38. if (checkSelfPermission != PackageManager.PERMISSION_GRANTED) {
  39. Log.i(TAG, "ActivityCompat.checkSelfPermission != PackageManager.PERMISSION_GRANTED");
  40.  
  41. if (ActivityCompat.shouldShowRequestPermissionRationale(activity, requestPermission)) {
  42. Log.i(TAG, "requestPermission shouldShowRequestPermissionRationale");
  43. shouldShowRationale(activity, requestCode, requestPermission);
  44.  
  45. } else {
  46. Log.d(TAG, "requestCameraPermission else");
  47. ActivityCompat.requestPermissions(activity, new String[]{requestPermission}, requestCode);
  48. }
  49.  
  50. } else {
  51. Log.d(TAG, "ActivityCompat.checkSelfPermission ==== PackageManager.PERMISSION_GRANTED");
  52. Toast.makeText(activity, "opened:" + requestPermissions[requestCode], Toast.LENGTH_SHORT).show();
  53. //得到权限的时候,就可以在回调里面做你想做的事情了
  54. permissionGrant.onPermissionGranted(requestCode);
  55. }
  56. }

一次申请多个权限

其实和申请一个权限是一样的,只是requestPermissions(final @NonNull Activity activity,
final @NonNull String[] permissions, final int requestCode),里面的permissions给的参数多些而已。

  1. /**
  2. * 一次申请多个权限
  3. */
  4. public static void requestMultiPermissions(final Activity activity, PermissionGrant grant) {
  5.  
  6. final List<String> permissionsList = getNoGrantedPermission(activity, false);
  7. final List<String> shouldRationalePermissionsList = getNoGrantedPermission(activity, true);
  8.  
  9. //TODO checkSelfPermission
  10. if (permissionsList == null || shouldRationalePermissionsList == null) {
  11. return;
  12. }
  13. Log.d(TAG, "requestMultiPermissions permissionsList:" + permissionsList.size() + ",shouldRationalePermissionsList:" + shouldRationalePermissionsList.size());
  14.  
  15. if (permissionsList.size() > 0) {
  16. ActivityCompat.requestPermissions(activity, permissionsList.toArray(new String[permissionsList.size()]),
  17. CODE_MULTI_PERMISSION);
  18. Log.d(TAG, "showMessageOKCancel requestPermissions");
  19.  
  20. } else if (shouldRationalePermissionsList.size() > 0) {
  21. showMessageOKCancel(activity, "should open those permission",
  22. new DialogInterface.OnClickListener() {
  23. @Override
  24. public void onClick(DialogInterface dialog, int which) {
  25. ActivityCompat.requestPermissions(activity, shouldRationalePermissionsList.toArray(new String[shouldRationalePermissionsList.size()]),
  26. CODE_MULTI_PERMISSION);
  27. Log.d(TAG, "showMessageOKCancel requestPermissions");
  28. }
  29. });
  30. } else {
  31. grant.onPermissionGranted(CODE_MULTI_PERMISSION);
  32. }
  33.  
  34. }

Android6.0动态权限申请的更多相关文章

  1. Android6.0动态权限申请步骤以及需要注意的一些坑

    因为工作需要,简单研究了一下Android6.0权限申请,在Google提供的sample的基础上,写了一个简单的demo.算是自己的笔记吧,可能会比较混乱,主要是方便以后查看.后期有别的问题,随时更 ...

  2. Android 6.0 动态权限申请注意事项

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/uana_777/article/details/54136255 Part One 权限区分 And ...

  3. Android 6.0动态权限申请

    转载(Android 6.0 动态权限申请简单简洁优雅的处理方式): https://blog.csdn.net/lin_dianwei/article/details/79025324

  4. android6.0动态权限处理<一>

    android 6.0以上为了保护用户的隐私,和以往被人诟病的权限机制,确立了新的权限机制.从 Android 6.0(API 级别 23)开始,用户开始在应用运行时向其授予权限,而不是在应用安装时授 ...

  5. Android 6.0 动态权限申请

    1. 概述 Android 6.0 (API 23) 之前应用的权限在安装时全部授予,运行时应用不再需要询问用户.在 Android 6.0 或更高版本对权限进行了分类,对某些涉及到用户隐私的权限可在 ...

  6. Android 6.0动态权限申请教程

    转载请标明出处: http://www.cnblogs.com/why168888/p/6580396.html 本文出自:[Edwin博客园] PermissionManage 介绍 如果设备运行的 ...

  7. android 6.0 动态权限

    Android 6.0 动态权限: 除了要在AndroidManifest.xml中申请外,还需使用时,请求用户允许授权. 以下是需要单独申请的权限,共分为9组,每组只要有一个权限申请成功了,就默认整 ...

  8. Android6.0动态申请权限那些坑--以及避免用户选择不再提示后无法获取权限的问题

    Android 6.0 为了保护用户隐私,将一些权限的申请放在了应用运行的时候去申请, 比如以往的开发中,开发人员只需要将需要的权限在清单文件中配置即可,安装后用户可以在设置中的应用信息中看到:XX应 ...

  9. Android6.0动态获取权限

    Android6.0采用新的权限模型,只有在需要权限的时候,才告知用户是否授权,是在runtime时候授权,而不是在原来安装的时候 ,同时默认情况下每次在运行时打开页面时候,需要先检查是否有所需要的权 ...

随机推荐

  1. HTML5快速入门(三)—— 标签综合运用

    前言: 1.HTML5的发展非常迅速,可以说已经是前端开发人员的标配,在电商类型的APP中更是运用广泛,这个系列的文章是本人自己整理,尽量将开发中不常用到的剔除,将经常使用的拿出来,使需要的朋友能够真 ...

  2. 在访问jsp时抛java.lang.IllegalArgumentException: Page directive: invalid value for import的原因

    问题:java.lang.IllegalArgumentException: Page directive: invalid value for import 环境:tomcat 7.0.65 出错原 ...

  3. Play Framework 完整实现一个APP(七)

    1.添加验证码 Application Controller添加captcha() public static void captcha() { Images.Captcha captcha = Im ...

  4. Redis 5种数据结构使用及注意事项

    1优缺点 非常非常的快,有测评说比Memcached还快(当大家都是单CPU的时候),而且是无短板的快,读写都一般的快,所有API都差不多快,也没有MySQL Cluster.MongoDB那样更新同 ...

  5. C#和ASP.NET之事件

    事件是一种用于类和类之间传递消息或触发新的行为的编程方式.通过提供事件的句柄,能够把控件和可执行的代码联系在一起, 如用户单击Button控件触发Click事件后就执行相应的事件处理代码. 事件的声明 ...

  6. hive load数据为null

    建表语句: CREATE EXTERNAL TABLE IF NOT EXISTS student2 > (sno INT,sname STRING,age INT,sex STRING) &g ...

  7. Tomcat:利用Apache配置反向代理、负载均衡

    本篇主要介绍apache配置反向代理,介绍了两种情况:第一种是,只使用apache配置反向代理:第二种是,apache与应用服务器(tomcat)结合,配置反向代理,同时了配置了负载均衡. 准备工作 ...

  8. SQL范式

    第一范式:确保每列的原子性(字段不可分). 如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式. 释义: 1.每一列属性都是不可再分的属性值,确保每一列的原子性 ...

  9. MyEclipse编码设置及字体设置等

    原文: http://wenku.baidu.com/link?url=GTo5q8E1iVRYIYa-AiDP6_PJ4sQk7j1SPTr-CthVBw9hTGLPgR4TOeq9o8Sg0yEJ ...

  10. mysqld设置密码

    用root 进入mysql后 mysql>set password =password('你的密码'); mysql>flush privileges;   登录: mysql -u ro ...