首先说下申请全部过程以及需要申请的权限
权限组 (如果你的项目中使用了以下权限,就必须要动态申请)
android.permission-group.CALENDAR(日历数据) |
|
android.permission-group.CAMERA(相机) |
|
android.permission-group.CONTACTS(联系人) |
|
android.permission-group.LOCATION(位置) |
|
android.permission-group.MICROPHONE(麦克风) |
|
android.permission-group.PHONE(电话) |
|
android.permission-group.SENSORS(传感器) |
|
android.permission-group.SMS(短信) |
|
android.permission-group.STORAGE(存储) |
|
以下是我封装了检测、申请权限的方法 PermissionUtil
//检查所需要的权限
public static boolean checkPermissionAllGranted(Activity activity, String[] permissions) {
for (String permission : permissions) {
if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) {
// 只要有一个权限没有被授予, 则直接返回 false
return false;
}
}
return true;
}
//申请所需要的权限
public static void requestAllPerssion(Activity activity, String[] permissions, int code) {
ActivityCompat.requestPermissions(activity, permissions, code);
}
/**
* 打开 APP 的权限设置
*/
public static void openAppDetails(final Activity activity) {
AlertDialog.Builder builder;
builder = new AlertDialog.Builder(activity);
builder.setMessage("请到设置中开启相应权限,否则部分功能无正常使用");
builder.setPositiveButton("去手动授权", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("package:" + activity.getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
activity.startActivity(intent);
}
});
builder.setNegativeButton("取消", null);
builder.show();
}
在代码中的使用
public class LauncherActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_launcher); boolean isAllGranted = PermissionUtil.checkPermissionAllGranted(this, new String[]{Manifest.permission.READ_PHONE_STATE}); // 如果这个权限全都拥有, 则直接执行备份代码 if (isAllGranted) { initView(); } else { PermissonUtil.requestAllPerssion(this, new String[]{Manifest.permission.READ_PHONE_STATE}, code); } }
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case code: boolean isAllGranted = true; // 判断是否所有的权限都已经授予了 for (int grant : grantResults) { if (grant != PackageManager.PERMISSION_GRANTED) { isAllGranted = false; break; } } if (isAllGranted) { } else { //如果没有权限就打开app权限设置界面 PermissionUtil.openAppDetails(this); } default: break; } super.onRequestPermissionsResult(requestCode, permissions, grantResults); }}