Android6.0哪些权限要动态申请?

来源:互联网 发布:查询数据库所有触发器 编辑:程序博客网 时间:2024/05/22 05:54


在Adroid系统6.0以前,权限的处理是在App安装时授权,授权完了才能完成相关的安装。而在6.0的系统上,是先安装App,在安装完之后,在使用相关权限的操作时,才会弹出权限的提示框,用户同意授权之后才能正常使用。谷歌这样做,可以让用户更加清醒的认识相关权限的使用,在一定程度上更加人性化和保护了用户的隐私。

谷歌官方将权限分为了两类,一个是正常权限(Normal Permissions),这类权限不涉及用户隐私,是不需要用户进行授权的,比如访问网络,手机震动等。还有一类是危险权限(Dangerous Permissions),一般是涉及到用户隐私的,需要用户进行授权,比如操作SD卡的写入,相机,录音等。

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


解决方法

看完官方文档,还好解决方案还不是太难,也不是非常麻烦,当然和以前相比还是有一点繁琐的。废话不多说了,解决方案如下。

检查系统版本

private boolean canMakeSmores(){    return(Build.VERSION.SDK_INT>Build.VERSION_CODES.LOLLIPOP_MR1);}

检查系统版本的原因,显而易见,如果是系统6.0及以上的,需要采用新的权限授权方法。

申请授权

举个例子,如果你需要拍照操作,那么你就应该在拍照操作的地方,先加上权限申请授权。方式如下:

String[] perms = {"android.permission.CAMERA"};int permsRequestCode = 200; requestPermissions(perms, permsRequestCode);

授权回调处理

@Overridepublic void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults){    switch(permsRequestCode){        case 200:            boolean cameraAccepted = grantResults[0]==PackageManager.PERMISSION_GRANTED;            if(cameraAccepted){                //授权成功之后,调用系统相机进行拍照操作等            }else{                //用户授权拒绝之后,友情提示一下就可以了            }            break;    }}

进一步处理和完善

通过上面可以看出,只检查系统版本了,如果授权过的权限,还需要再次去授权么?我们的判断其实可以更完善一下,比如:

private boolean hasPermission(String permission){    if(canMakeSmores()){        return(checkSelfPermission(permission)==PackageManager.PERMISSION_GRANTED);    }    return true;}


0 0
原创粉丝点击