Как проверить, нажмите на кнопку «Разрешить» в разрешениях во время выполнения - PullRequest
0 голосов
/ 13 июня 2018

В своем приложении я хочу использовать runtime permissions для Storage и Camera.

. Для этого я написал код ниже, и он работает для меня, но я хочу знать, нажимает ли пользовательна опции «Разрешить» или нет.

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");
    }
}

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Следующие правила подразумеваются при запросе разрешения:

  • Если вы запрашиваете разрешение в android.support.v4.app.Fragment, вам следует просто позвонить requestPermissions (так как оно уже доступно в lib поддержки).
  • Если вы вызываете ActivityCompat.requestPermissions во фрагменте, то обратный вызов onRequestPermissionsResult будет доставлен в Activity, а не Fragment.

Поскольку вы запрашиваете разрешение в android.support.v4.app.Fragment либопросто используйте requestPermissions или Override onRequestPermissionsResult в вашем Activity и обработайте результат там.

0 голосов
/ 13 июня 2018

При использовании библиотеки поддержки вы должны использовать правильные вызовы методов.Например:

  • В AppCompatActivity следует использовать ActivityCompat.requestPermissions;

  • Когда в android.support.v4.app.Fragment , вы должны просто использовать requestPermissions (это метод экземпляра android.support.v4.app.Fragment)

Если вы вызываете ActivityCompat.requestPermissions во фрагменте , обратный вызов onRequestPermissionsResult вызывается для активности, а не для фрагмента.

Надеюсь, что объяснение помогает!

Чтобы получить больше знаний, прочитайте здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...