安卓6.0(API23)权限问题爬坑之旅!
来源:互联网 发布:机器人学 知乎 编辑:程序博客网 时间:2024/06/07 02:36
安卓6.0权限问题分析与解决
引言
现在安卓系统已经发布了最新的7.0版本,对系统进行了升级和优化,在6.0版本的时候修改了系统权限的安全级别,区分为普通权限和需要申请的特殊权限,6.0之前所有的权限都可以在清单配置文件在AndroidManifest.xml中申请,6.0之后只有部分权限可以在清单配置中申请,其他特殊权限需要动态申请,本文引用google的demo初步解决了6.0的权限申请问题,希望大家指正!
Google-demo下载地址
权限分类
普通权限(在清单配置中修改)
android.permission.ACCESS_LOCATION_EXTRA_COMMANDS
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_NOTIFICATION_POLICY
android.permission.ACCESS_WIFI_STATE
android.permission.ACCESS_WIMAX_STATE
android.permission.BLUETOOTH
android.permission.BLUETOOTH_ADMIN
android.permission.BROADCAST_STICKY
android.permission.CHANGE_NETWORK_STATE
android.permission.CHANGE_WIFI_MULTICAST_STATE
android.permission.CHANGE_WIFI_STATE
android.permission.CHANGE_WIMAX_STATE
android.permission.DISABLE_KEYGUARD
android.permission.EXPAND_STATUS_BAR
android.permission.FLASHLIGHT
android.permission.GET_ACCOUNTS
android.permission.GET_PACKAGE_SIZE
android.permission.INTERNET
android.permission.KILL_BACKGROUND_PROCESSES
android.permission.MODIFY_AUDIO_SETTINGS
android.permission.NFC
android.permission.READ_SYNC_SETTINGS
android.permission.READ_SYNC_STATS
android.permission.RECEIVE_BOOT_COMPLETED
android.permission.REORDER_TASKS
android.permission.REQUEST_INSTALL_PACKAGES
android.permission.SET_TIME_ZONE
android.permission.SET_WALLPAPER
android.permission.SET_WALLPAPER_HINTS
android.permission.SUBSCRIBED_FEEDS_READ
android.permission.TRANSMIT_IR
android.permission.USE_FINGERPRINT
android.permission.VIBRATE
android.permission.WAKE_LOCK
android.permission.WRITE_SYNC_SETTINGS
com.android.alarm.permission.SET_ALARM
com.android.launcher.permission.INSTALL_SHORTCUT
com.android.launcher.permission.UNINSTALL_SHORTCUT
动态权限
以下是需要单独申请的权限,共分为9组,每组只要有一个权限申请成功了,就默认整组权限都可以使用了。
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
权限申请
1.将targetSdkVersion设置为23,注意,如果你将targetSdkVersion设置为>=23,则必须按照Android谷歌的要求,动态的申请权限,如果你暂时不打算支持动态权限申请,则targetSdkVersion最大只能设置为22.(注:如果不需要使用23以上的特性或功能可以选择设置为22)
2. 在AndroidManifest.xml中申请你需要的权限,包括普通权限和需要申请的特殊权限。
3. 开始申请权限,此处分为3部。
(1)Activity继承AppCompatActivity,检查是否由此权限checkSelfPermission(),如果已经开启,则直接做你想做的。
public static int checkSelfPermission(@NonNull Context context, @NonNull String permission) { if (permission == null) { throw new IllegalArgumentException("permission is null"); } return context.checkPermission(permission, android.os.Process.myPid(), Process.myUid()); }
(2)如果未开启,则判断是否需要向用户解释为何申请权限shouldShowRequestPermissionRationale。
@Override public boolean shouldShowRequestPermissionRationale(String permission) { return super.shouldShowRequestPermissionRationale(permission); }
(3)如果需要(即返回true),则可以弹出对话框提示用户申请权限原因,用户确认后申请权限requestPermissions(),如果不需要(即返回false),则直接申请权限requestPermissions()。
PermissionUtils.requestPermission(this, PermissionUtils.CODE_CAMERA, mPermissionGrant);
(4)在权限开启成功的回调方法中执行要执行的方法。
private PermissionUtils.PermissionGrant mPermissionGrant = new PermissionUtils.PermissionGrant() { @Override public void onPermissionGranted(int requestCode) { switch (requestCode) { case PermissionUtils.CODE_CAMERA: Intent intent2 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent2.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "pic.jpg"))); startActivityForResult(intent2, 1);// 采用ForResult打开 break; default: break; } } };
(5)显示权限开启结果。
@Override public void onRequestPermissionsResult(final int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { PermissionUtils.requestPermissionsResult(this, requestCode, permissions, grantResults, mPermissionGrant); }
最后给上demo
permissionutils
希望可以帮到入坑的同学
- 安卓6.0(API23)权限问题爬坑之旅!
- caused by android.system.errnoexception open failed eacces (permission denied)解决方案,安卓6.0(API23)权限问题
- caused by android.system.errnoexception open failed eacces (permission denied)解决方案,安卓6.0(API23)权限问题
- caused by android.system.errnoexception open failed eacces (permission denied)解决方案,安卓6.0(API23)权限问题
- caused by android.system.errnoexception open failed eacces (permission denied)解决方案,安卓6.0(API23)权限问题
- caused by android.system.errnoexception open failed eacces (permission denied)解决方案,安卓6.0(API23)权限问题
- Android之动态申请权限(API23以上需求)
- Android之动态申请权限(API23以上需求)
- 安卓API 6.0权限问题
- 安卓6.0权限相关问题
- 安卓6.0注意的权限问题
- 安卓6.0以上动态权限问题
- 安卓权限配置问题
- 安卓webrtc权限问题
- 安卓的权限问题
- Android工具之解决安卓6.0以上版本不能读取外部存储权限的问题
- Android API23(6.0)以上手机必须手动检测读取权限
- Android API23(6.0)以上手机必须手动检测读取权限
- word2010 去掉右侧带格式的审阅修订标记
- Lua与.net的CLR相互调用
- Codeforces Round #313 (Div. 1) B. Equivalent Strings DFS暴力
- 服务器配置nginx和tomcat都使用https协议
- 基础练习 查找整数
- 安卓6.0(API23)权限问题爬坑之旅!
- spring3.0定时任务
- NOAUTH Authentication required redis
- 面试感悟:3年工作经验程序员应有的技能
- ubuntu串口的安装和使用(usb转串口)
- 判断字符串中是否包含连续相同的字符串(密码规范)
- Maven入门-4.Maven的依赖
- 很好的一个 Spring MVC 解读---<context:component-scan/>
- 三分