【问题标题】:How to check click on "Allow" option in runtime permissions如何检查运行时权限中的“允许”选项
【发布时间】:2018-06-13 12:11:35
【问题描述】:

在我的应用程序中,我想将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");
    }
}

【问题讨论】:

  • CAMERA_REQ & STORAGE_REQ 的值是多少?
  • @Sagar,请看我的更新代码
  • @Sagar,我的朋友,你能帮帮我吗?
  • 是否显示权限对话框?
  • @Sagar,是的权限对话框显示,当点击允许我可以打开相机。但单击允许时不显示日志。请帮帮我

标签: java android runtime-permissions


【解决方案1】:

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

  • 如果您在android.support.v4.app.Fragment 中请求权限,您只需调用requestPermissions(因为它已在支持库中可用)。
  • 如果您在片段中调用ActivityCompat.requestPermissions,则onRequestPermissionsResult 回调将被传递到Activity 而不是Fragment

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

【讨论】:

  • 你能把我上面的代码发给我吗?请
  • @Hock 只需从 ActivityCompat.requestPermissions 中删除 ActivityCompat
  • @Hock 没问题。享受编码:-)
【解决方案2】:

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

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

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

如果您在 fragment 中调用 ActivityCompat.requestPermissions,则会在 Activity 而不是 Fragment 上调用 onRequestPermissionsResult 回调。

希望解释有所帮助!

要了解更多知识,请阅读here

【讨论】:

  • 我如何在这个片段中使用它?我想调用片段
  • 使用Fragment的时候,应该简单的使用requestPermissions(这是android.support.v4.app.Fragment的一个实例方法)
  • 你能把我上面的代码发给我吗?请
  • requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, STORAGE_REQ)
  • 谢谢亲爱的朋友
猜你喜欢
  • 2017-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-13
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
  • 2019-04-28
相关资源
最近更新 更多