標籤:slist multicast smi internet 等於 知識 ram wap request
goggle在Android6.0要求部分許可權需要動態申請,直接下載AndroidManifest.xml中無效
- 6.0許可權的基本知識,以下是需要單獨申請的許可權,共分為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
- 以下是普通許可權,只需要在AndroidManifest.xml中申請即可
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
- 將targetSdkVersion設定為23,注意,如果你將targetSdkVersion設定為>=23,則必須按照AndroidGoogle的要求,動態申請許可權,如果你暫時不打算支援動態許可權申請,則targetSdkVersion最大隻能設定為22
- 在AndroidManifest.xml中申請你需要的許可權,包括普通許可權和需要申請的特殊許可權。
開始申請許可權,此處分為3部。
/** * Requests permission. * * @param activity * @param requestCode request code, e.g. if you need request CAMERA permission,parameters is PermissionUtils.CODE_CAMERA */ public static void requestPermission(final Activity activity, final int requestCode, PermissionGrant permissionGrant) { if (activity == null) { return; } Log.i(TAG, "requestPermission requestCode:" + requestCode); if (requestCode < 0 || requestCode >= requestPermissions.length) { Log.w(TAG, "requestPermission illegal requestCode:" + requestCode); return; } final String requestPermission = requestPermissions[requestCode]; //如果是6.0以下的手機,ActivityCompat.checkSelfPermission()會始終等於PERMISSION_GRANTED, // 但是,如果使用者關閉了你申請的許可權(如,在安裝的時候,將一些許可權關閉了),ActivityCompat.checkSelfPermission()則可能會導致程式崩潰(java.lang.RuntimeException: Unknown exception code: 1 msg null), // 你可以使用try{}catch(){},處理異常,也可以判斷系統版本,低於23就不申請許可權,直接做你想做的。permissionGrant.onPermissionGranted(requestCode);// if (Build.VERSION.SDK_INT < 23) {// permissionGrant.onPermissionGranted(requestCode);// return;// } int checkSelfPermission; try { checkSelfPermission = ActivityCompat.checkSelfPermission(activity, requestPermission); } catch (RuntimeException e) { Toast.makeText(activity, "please open this permission", Toast.LENGTH_SHORT) .show(); Log.e(TAG, "RuntimeException:" + e.getMessage()); return; } if (checkSelfPermission != PackageManager.PERMISSION_GRANTED) { Log.i(TAG, "ActivityCompat.checkSelfPermission != PackageManager.PERMISSION_GRANTED"); if (ActivityCompat.shouldShowRequestPermissionRationale(activity, requestPermission)) { Log.i(TAG, "requestPermission shouldShowRequestPermissionRationale"); shouldShowRationale(activity, requestCode, requestPermission); } else { Log.d(TAG, "requestCameraPermission else"); ActivityCompat.requestPermissions(activity, new String[]{requestPermission}, requestCode); } } else { Log.d(TAG, "ActivityCompat.checkSelfPermission ==== PackageManager.PERMISSION_GRANTED"); Toast.makeText(activity, "opened:" + requestPermissions[requestCode], Toast.LENGTH_SHORT).show();//得到許可權的時候,就可以在回調裡面做你想做的事情了 permissionGrant.onPermissionGranted(requestCode); } }
一次申請多個許可權
其實和申請一個許可權是一樣的,只是requestPermissions(final @NonNull Activity activity,
final @NonNull String[] permissions, final int requestCode),裡面的permissions給的參數多些而已。
/** * 一次申請多個許可權 */ public static void requestMultiPermissions(final Activity activity, PermissionGrant grant) { final List<String> permissionsList = getNoGrantedPermission(activity, false); final List<String> shouldRationalePermissionsList = getNoGrantedPermission(activity, true); //TODO checkSelfPermission if (permissionsList == null || shouldRationalePermissionsList == null) { return; } Log.d(TAG, "requestMultiPermissions permissionsList:" + permissionsList.size() + ",shouldRationalePermissionsList:" + shouldRationalePermissionsList.size()); if (permissionsList.size() > 0) { ActivityCompat.requestPermissions(activity, permissionsList.toArray(new String[permissionsList.size()]), CODE_MULTI_PERMISSION); Log.d(TAG, "showMessageOKCancel requestPermissions"); } else if (shouldRationalePermissionsList.size() > 0) { showMessageOKCancel(activity, "should open those permission", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ActivityCompat.requestPermissions(activity, shouldRationalePermissionsList.toArray(new String[shouldRationalePermissionsList.size()]), CODE_MULTI_PERMISSION); Log.d(TAG, "showMessageOKCancel requestPermissions"); } }); } else { grant.onPermissionGranted(CODE_MULTI_PERMISSION); } }
Android6.0動態許可權申請