Диалог разрешения времени выполнения не отображается на некоторых устройствах, имеющих зефир
Здравствуйте, я столкнулся с проблемой, что некоторые устройства не показывают разрешение во время выполнения. В чем будет проблема? Я сталкиваюсь с некоторыми устройствами и сбоями приложений. Но когда я захожу в настройки и разрешаю разрешения, тогда все нормально
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;
}
}