近日面试时候,被问到了关于Android应用权限的动态获取的问题,这里做个总结如下:
在权限被拒绝后,我们可以使用
ActivityCompat.requestPermissions(this, permissions, PERMISSION_REQUEST_CODE) 来动态获取。该方法是activitycompat的一个静态方法,兼容了低版本的问题。我们可以写一个权限检查的工具类,用来检查应用需要的权限:
#
public class PermissionsChecker { private final Context mContext; public PermissionsChecker(Context context) { mContext = context.getApplicationContext(); } // 判断权限集合 public boolean lacksPermissions(String... permissions) { for (String permission : permissions) { if (lacksPermission(permission)) { return true; } } return false; } // 判断是否缺少权限 private boolean lacksPermission(String permission) { return ContextCompat.checkSelfPermission(mContext, permission) == PackageManager.PERMISSION_DENIED; } } #如果缺少权限了,我们利用上面的
ActivityCompat.requestPermissions(this, permissions, PERMISSION_REQUEST_CODE) 来获取权限即可。此时如果用户不提供给我们权限,我们可以将应用退出。 // 显示缺失权限提示 private void showMissingPermissionDialog() { PermissionsDialog.Builder builder = new PermissionsDialog.Builder(this); builder.setTitle(R.string.help); builder.setMessage(R.string.string_help_text); // 拒绝, 退出应用 builder.setNegativeButton(R.string.quit, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { setResult(PERMISSIONS_DENIED); System.exit(0);//这里可以将应用退出 finish(); } }); builder.setPositiveButton(R.string.settings, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { startAppSettings();//启动系统设置 } }); builder.create().show(); }