本文共 4277 字,大约阅读时间需要 14 分钟。
简单代码:
public class LaunchActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_launch); if (isGrantSDCardReadPermission()) { // } else { requestPermission(); } } private boolean isGrantSDCardReadPermission() { return PermissionUtils.isGrantSDCardReadPermission(this); } private void requestPermission() { PermissionUtils.requestSDCardReadPermission(this, REQUEST_CODE_SDCARD_READ); } private static final int REQUEST_CODE_SDCARD_READ = 1; @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case REQUEST_CODE_SDCARD_READ: if (isGrantSDCardReadPermission()) { // } else { Toast.makeText(this, "failure because without sd card read permission", Toast.LENGTH_SHORT).show(); } break; default: break; } }}
public class PermissionUtils { /** * 是否有权限 * * @param context * @return */ public static boolean checkSelfPermission(Context context, String permission) { if (null == context) { return false; } int per = ContextCompat.checkSelfPermission(context, permission); return per == PackageManager.PERMISSION_GRANTED; } /** * Check that all given permissions have been granted by verifying that each entry in the * given array is of the value {@link PackageManager#PERMISSION_GRANTED}. * * @see Activity#onRequestPermissionsResult(int, String[], int[]) */ public static boolean verifyPermissions(int[] grantResults) { // At least one result must be checked. if (null == grantResults || grantResults.length < 1) { return false; } // Verify that each required permission has been granted, otherwise return false. for (int result : grantResults) { if (result != PackageManager.PERMISSION_GRANTED) { return false; } } return true; } public static boolean isGrantSDCardReadPermission(Context context) { return checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE); } public static void requestSDCardReadPermission(Activity activity, int requestCode) { ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, requestCode); }}
最后再附上需要动态申请的权限组,每组只要有一个权限申请成功,就默认组内其他权限申请成功了。
group:android.permission-group.CONTACTS permission:android.permission.WRITE_CONTACTS permission:android.permission.GET_ACCOUNTS permission:android.permission.READ_CONTACTSgroup: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_VOICEMAILgroup:android.permission-group.CALENDAR permission:android.permission.READ_CALENDAR permission:android.permission.WRITE_CALENDARgroup:android.permission-group.CAMERA permission:android.permission.CAMERAgroup:android.permission-group.SENSORS permission:android.permission.BODY_SENSORSgroup:android.permission-group.LOCATION permission:android.permission.ACCESS_FINE_LOCATION permission:android.permission.ACCESS_COARSE_LOCATIONgroup:android.permission-group.STORAGE permission:android.permission.READ_EXTERNAL_STORAGE permission:android.permission.WRITE_EXTERNAL_STORAGEgroup:android.permission-group.MICROPHONE permission:android.permission.RECORD_AUDIOgroup: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
转载地址:http://lorki.baihongyu.com/