Ошибка при работе с Runtime Permissions

264
06 апреля 2017, 17:54

Здравствуйте!
Я столкнулся со следующей проблемой: мое приложение должно запрашивать 2 разрешение (CAMERA и WRITE_EXTERNAL_STORAGE). Запрашиваю эти разрешения сразу при старте приложения, проверку на наличие разрешений поместил в метод onCreate(). Проблема в том, что приложение запрашивает только разрешение на использование камеры (CAMERA) и игнорирует запрос на запись в external storage (WRITE_EXTERNAL_STORAGE).
Буду благодарен за любую помощь.

Объявление констант для разрешения:

private static final int PERMISSION_REQUEST_CAMERA = 0;
private static final int PERMISSION_REQUEST_EXTERNAL_STORAGE = 1;

Вызов метода проверки разрешений:

@Override
protected void onCreate(Bundle savedInstanceState) {
    //Инициализация объектов пользовательского интерфейса
    checkApplicationPermissions();
}

Метод проверки наличия разрешений:

public void checkApplicationPermissions() {
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
        requestPermission(PERMISSION_REQUEST_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)
        requestPermission(PERMISSION_REQUEST_CAMERA, Manifest.permission.CAMERA);
}

Метод запроса на разрешение:

/**
 * Запрос на разрешение
 * @param PERMISSION_CODE Код разрешения
 * @param permission Разрешение
 */
private void requestPermission(final int PERMISSION_CODE, String permission) {
    if (ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {
        ActivityCompat.requestPermissions(MainActivity.this,
                new String[]{permission},
                PERMISSION_CODE);
    } else {
        ActivityCompat.requestPermissions(this, new String[]{permission},
                PERMISSION_CODE);
    }
}

Метод обработки запроса на разрешение:

/**
 * Обработка ответа на запрос разрешения
 * @param requestCode Код разрешения
 * @param permissions Разрешение
 * @param grantResults Ответ
 */
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        onStart();
    } else {
        Toast.makeText(getApplicationContext(), "Разрешение отклонено.", Toast.LENGTH_SHORT).show();
        tvErrorPermission.setText(getString(R.string.error_permission_camera));
    }
}
Answer 1

Проблема решилась удалением приложения с телефона (тестировал на Nexus 5) и повторным запуском из Android Studio.

PS: Программирование - МАГИЯ!!!

READ ALSO
Почему не работает JDBC драйвер?

Почему не работает JDBC драйвер?

Вечерок всем! Пытаюсь подключиться к базе данных MYSQL при помощи JDBC драйвераИспользую Intelej Idea - все работает, копипастю ТОТ ЖЕ КОД в Android Studio...

257
ViewPager обновить

ViewPager обновить

Как обновить ViewPagerОн входит в другой ViewPager

300
Помощь с массивом

Помощь с массивом

Есть 2 массива, в каждом из которых n элементовВ первом значение некой переменной w, во втором значение функции, зависящей от этой переменной

194