权限申请
String[] needPermissions = {
Manifest.permission.CAMERA
};
List<String> needRequestPermissonList = findDeniedPermissions(MainActivity.this,needPermissions);
if (null != needRequestPermissonList
&& needRequestPermissonList.size() > 0) {
ActivityCompat.requestPermissions(MainActivity.this,
needRequestPermissonList.toArray(
new String[needRequestPermissonList.size()]),
PERMISSON_REQUESTCODE);
} else {
Toast.makeText(MainActivity.this,"权限已申请好,在这里做操作",Toast.LENGTH_SHORT).show();
}
private List<String> findDeniedPermissions(Activity activity, String[] permissions) {
List<String> needRequestPermissonList = new ArrayList<String>();
for (String perm : permissions) {
if (ContextCompat.checkSelfPermission(activity,
perm) != PackageManager.PERMISSION_GRANTED
|| ActivityCompat.shouldShowRequestPermissionRationale(
activity, perm)) {
needRequestPermissonList.add(perm);
}
}
return needRequestPermissonList;
}
处理权限被拒绝且被选中“不再提示”的情况
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSON_REQUESTCODE) {
if (!Utils.verifyPermissions(grantResults)) {
showMissingPermissionDialog();
} else {
}
}
}
工具类
public class Utils {
public static boolean verifyPermissions(int[] grantResults) {
//检测是否所有的权限都已经授权
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
}
无权限后弹框引导用户去设置权限的操作
private void showMissingPermissionDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("温馨提示");
builder.setIcon(R.drawable.ic_launcher);
builder.setMessage("本应用缺少必要权限。请点击\"设置\"-\"权限\"-打开所需权限。");
// 拒绝, 退出应用
builder.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
builder.setPositiveButton("设置",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//进入应用设置
Intent intent = new Intent(
Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + MainActivity.this.getPackageName()));
MainActivity.this.startActivityForResult(intent, SETTING_REQUESTCODE);
}
});
builder.setCancelable(false);
builder.show();
}
至此动态权限的申请就可以使用了。不再怕用户点击了“不再提醒”按钮了。