权限分为两种:
第一种就是危害不大的,比如手机振动权限,这种权限是用户在安装程序的时候添加的,和之前请求权限是一样的,没有任何变化,就是在清单文件中添加相关的权限,这些权限我简单的列了出来:
-
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
第二种权限就是涉及到用户隐私之类的权限,这类权限就需要在代码中动态请求用户批准了,权限被分组了,如下表:
动态申请:
if(checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);
}
还可以复写Activity的onRequestPermissionsResult方法,监听申请结果
/**
* Callback for the result from requesting permissions. This method
* is invoked for every call on {@link #requestPermissions(String[], int)}.
* <p>
* <strong>Note:</strong> It is possible that the permissions request interaction
* with the user is interrupted. In this case you will receive empty permissions
* and results arrays which should be treated as a cancellation.
* </p>
*
* @param requestCode The request code passed in {@link #requestPermissions(String[], int)}.
* @param permissions The requested permissions. Never null.
* @param grantResults The grant results for the corresponding permissions
* which is either {@link android.content.pm.PackageManager#PERMISSION_GRANTED}
* or {@link android.content.pm.PackageManager#PERMISSION_DENIED}. Never null.
*
* @see #requestPermissions(String[], int)
*/
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
/* callback - no nothing */
}
本文详细解析了Android系统的权限机制,分为清单文件中声明的无害权限和需动态申请的隐私相关权限,介绍了如何在代码中实现动态权限申请及回调处理。

被折叠的 条评论
为什么被折叠?



