您的位置:首页 > 移动开发 > Android开发

Android 6.0动态申请权限

2017-05-25 11:23 531 查看
参考:http://blog.csdn.net/wwdlss/article/details/52909098            http://www.jianshu.com/p/a51593817825             http://www.cnblogs.com/tangs/articles/6377347.html 在Adroid系统6.0以前,权限的处理是在App安装时授权,授权完了才能完成相关的安装。而在6.0的系统上,是先安装App,在安装完之后,在使用相关权限的操作时,才会弹出权限的提示框,用户同意授权之后才能正常使用。谷歌这样做,可以让用户更加清醒的认识相关权限的使用,在一定程度上更加人性化和保护了用户的隐私。谷歌官方将权限分为了两类,一个是正常权限(Normal Permissions),这类权限不涉及用户隐私,是不需要用户进行授权的,比如访问网络,手机震动等。还有一类是危险权限(Dangerous Permissions),一般是涉及到用户隐私的,需要用户进行授权,比如操作SD卡的写入,相机,录音等。

Normal Permissions:

ACCESS_LOCATION_EXTRA_COMMANDSACCESS_NETWORK_STATEACCESS_NOTIFICATION_POLICYACCESS_WIFI_STATEBLUETOOTHBLUETOOTH_ADMINBROADCAST_STICKYCHANGE_NETWORK_STATECHANGE_WIFI_MULTICAST_STATECHANGE_WIFI_STATEDISABLE_KEYGUARDEXPAND_STATUS_BARGET_PACKAGE_SIZEINSTALL_SHORTCUTINTERNETKILL_BACKGROUND_PROCESSESMODIFY_AUDIO_SETTINGSNFCREAD_SYNC_SETTINGSREAD_SYNC_STATSRECEIVE_BOOT_COMPLETEDREORDER_TASKSREQUEST_INSTALL_PACKAGESSET_ALARMSET_TIME_ZONESET_WALLPAPERSET_WALLPAPER_HINTSTRANSMIT_IRUNINSTALL_SHORTCUTUSE_FINGERPRINTVIBRATEWAKE_LOCKWRITE_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
需要动态申请的权限遵循权限组的概念,权限组中只要一个权限被允许使用了,默认整个组中的所有权限就都被允许使用了。以permission-group.CONTACTS组为例
,如果android.permission.WRITE_CONTACTS权限被允许使用了,那么
android.permission.GET_ACCOUNTS和
android.permission.READ_CONTACTS这两个权限就都被允许使用了。
需要注意的是即时需要动态授权的权限也需要在
AndroidManifest.xml文件里声明。

申请步骤

将targetSdkVersion设置为23,注意,如果你将targetSdkVersion设置为>=23,则必须按照Android谷歌的要求,动态的申请权限,如果你暂时不打算支持动态权限申请,则targetSdkVersion最大只能设置为22.2 在AndroidManifest.xml中申请你需要的权限,包括普通权限和需要申请的特殊权限。3.开始申请权限,此处分为3部。(1)检查是否由此权限checkSelfPermission(),如果已经开启,则直接做你想做的。(2)如果未开启,则判断是否需要向用户解释为何申请权限shouldShowRequestPermissionRationale。(3)如果需要(即返回true),则可以弹出对话框提示用户申请权限原因,用户确认后申请权限requestPermissions(),如果不需要(即返回false),则直接申请权限requestPermissions()。
申请权限代码:
1:检查是否拥有权限检查是否已拥有了权限,可以使用ContextCompat.checkSelfPermission(Context context, String permission);checkSelfPermission方法中有两个参数,分别是上下文,以及所申请的权限。如果有权限,请让它直接去读取短信信息。如果没有权限则去申请。2:申请权限申请权限则是使用:public static void requestPermissions(final Activity activity,final String[] permissions, final int requestCode) {}requestPermissions方法中需要三个参数,当前的activity,所申请的权限,可以是多个,最后就是请求码,既然有请求码说明它会有一个回调,也就是我们下面要讲的处理回调。3:处理权限回调处理权限回调,需要在Activity中重写onRequestPermissionsResult方法:然后在方法内判断用户是授权了该权限组还是拒绝授权,如果授权则就去获取短信信息,否则,在这里我只是显示了一个toast提示框。这里再次说明下,权限组内只要有一个被授权,其他的权限也就有了权限,这也是为什么直接使用grantResults[0] == PackageManager.PERMISSION_GRANTED的原因。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: