如何检查运行时权限中的单击"Allow"选项



在我的应用程序中,我想将runtime permissions用于StorageCamera

为此,我写了下面的代码,它对我有用,但我想知道用户是否单击"允许"选项。

private static final int CAMERA_REQ = 2008;
private static final int STORAGE_REQ = 2005;
@OnClick(R.id.newAddFrag_uploadImageRootLay)
void uploadImage() {
new MaterialDialog.Builder(getActivity())
.title("Select")
.items(R.array.uploadImages)
.titleGravity(GravityEnum.CENTER)
.itemsGravity(GravityEnum.CENTER)
.typeface("IranSans.ttf", "IranSans.ttf")
.itemsIds(R.array.itemIds)
.itemsCallback(new MaterialDialog.ListCallback() {
@Override
public void onSelection(MaterialDialog dialog, View view, int which, CharSequence text) {
switch (which) {
case 0:
if (checkIfStorage(context)) {
Intent galleryIntent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(galleryIntent, REQUEST_PICK_PHOTO);
} else {
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE}, STORAGE_REQ);
}
break;
case 1:
if (checkIfCamera(context)) {
captureImage();
} else {
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.CAMERA}, CAMERA_REQ);
}
break;
}
}
})
.show();
}
private boolean checkIfCamera(Context context) {
int result = ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA);
if (result == PackageManager.PERMISSION_GRANTED) {
return true;
} else {
return false;
}
}
private boolean checkIfStorage(Context context) {
int result = ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE);
if (result == PackageManager.PERMISSION_GRANTED) {
return true;
} else {
return false;
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == 0) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
newAddFrag_uploadImageRootLay.setEnabled(true);
newAddFrag_uploadImageSuccessTxt.setEnabled(true);
newAddFrag_uploadImageLay.setEnabled(true);
}
}
if (requestCode == CAMERA_REQ) {
Log.e("permissionsLog", "CAMERA");
}
if (requestCode == STORAGE_REQ) {
Log.e("permissionsLog", "STORAGE");
}
}

请求权限时隐含以下规则:

  • 如果您在android.support.v4.app.Fragment中请求权限,您应该简单地调用requestPermissions(因为它已经在支持 lib 中可用(。
  • 如果在片段中调用ActivityCompat.requestPermissions,则onRequestPermissionsResult回调将传递到活动,而不是Fragment

由于您正在请求android.support.v4.app.Fragment权限,因此只需在Activity中使用requestPermissions或覆盖onRequestPermissionsResult并在那里处理结果。

使用支持库时,必须使用正确的方法调用。例如:

  • AppCompatActivity中,您应该使用 ActivityCompat.requestPermissions;

  • android.support.v4.app.Fragment中时,您应该简单地使用 requestPermissions(这是 android.support.v4.app.Fragment 的实例方法(

如果在片段中调用ActivityCompat.requestPermissions,则会在活动而不是片段上调用onRequestPermissionsResult回调。

希望解释有帮助!

要获得更多知识,请阅读此处。

相关内容

最新更新