首先说下申请全部过程以及需要申请的权限
权限组 (如果你的项目中使用了以下权限,就必须要动态申请)
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);
}
}