Диалог разрешения времени выполнения не отображается на некоторых устройствах, имеющих зефир

Здравствуйте, я столкнулся с проблемой, что некоторые устройства не показывают разрешение во время выполнения. В чем будет проблема? Я сталкиваюсь с некоторыми устройствами и сбоями приложений. Но когда я захожу в настройки и разрешаю разрешения, тогда все нормально

3 ответа

Вы можете установить Permissions без диалогового окна при первом запуске вашего приложения программно.

private void setPermission(string permission){
        Process process = null;
        try {
            process = Runtime.getRuntime().exec("/system/bin/su -c pm grant " + [your package name] + " " + permission);
            process.waitFor();
            Log.d(TAG, "permission exec done " + process.exitValue());

        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

Теперь вы можете позвонить с помощью:

setPermission("android.permission.SYSTEM_ALERT_WINDOW");

Я не уверен на 100 %, если тебе нужно sudo.

Лучшая практика для обработки разрешения во время выполнения - через RxPermission.

Попробуйте с RxPermission решит вашу проблему

String[] permissions = new String[]{
        Manifest.permission.WRITE_SETTINGS,
        Manifest.permission.SYSTEM_ALERT_WINDOW,
        Manifest.permission.WAKE_LOCK,
        Manifest.permission.INTERNET,
        Manifest.permission.READ_PHONE_STATE,
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.BROADCAST_STICKY,
        Manifest.permission.VIBRATE,
        Manifest.permission.RECORD_AUDIO,

};
 private boolean checkPermissions() {
    int result;
    List<String> listPermissionsNeeded = new ArrayList<>();
    for (String p : permissions) {
        result = ContextCompat.checkSelfPermission(getActivity(), p);
        if (result != PackageManager.PERMISSION_GRANTED) {
            listPermissionsNeeded.add(p);
        }
    }
    if (!listPermissionsNeeded.isEmpty()) {
        ActivityCompat.requestPermissions(root, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), REQUEST_ID_MULTIPLE_PERMISSIONS);
        return false;
    }
    return true;
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    if (requestCode == REQUEST_ID_MULTIPLE_PERMISSIONS) {
        if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // selectImage();
            // isPermission = true;
        }
        return;
    }
}
Другие вопросы по тегам