«Глобальный список настроек оболочки adb» не работает программно в AndroidAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 «Глобальный список настроек оболочки adb» не работает программно в Android

Сообщение Anonymous »

Я хочу программно прочитать глобальные настройки в Android.

При использовании ADB в Android Studio команда list работает отлично:
adb shell settings list global

и возвращает список настроек:
...
sound_trigger_detection_service_op_timeout=15000
sqlite_compatibility_wal_flags=
stay_on_while_plugged_in=7
subscription_mode=0
...

и установка работает как положено
adb shell settings put global stay_on_while_plugged_in 0

Проблема в том, что я хочу сделать это программно.

Нет никаких исключений, но команда «settings list global» не возвращает строки.

Как вы можете видеть, я также пытался задать ACTION_MANAGE_WRITE_SETTINGS, но не работает:
private void getCurrentSettings(){
if (Settings.System.canWrite(this)){
try {
String command = "settings list global";

Process shell = Runtime.getRuntime().exec(command);
shell.waitFor();
BufferedReader br = new BufferedReader(new InputStreamReader(shell.getInputStream()));
String line;

while ((line = br.readLine()) != null) {
Log.d("settings", line);
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
intent.setData(Uri.parse("package:"+getApplicationContext().getPackageName()));
startActivity(intent);
}
}

ОБНОВЛЕНИЕ от 30 сентября 2021 г.:
Благодаря комментарию @TDG я могу получить сообщение об ошибке команды exec.

Это ошибка в случае команды list: "settings list global"
Exception occurred while executing 'list':
java.lang.SecurityException: Permission Denial: getCurrentUser() from pid=32475, uid=10603 requires android.permission.INTERACT_ACROSS_USERS
at com.android.server.am.UserController.getCurrentUser(UserController.java:2168)
at com.android.server.am.ActivityManagerService.getCurrentUser(ActivityManagerService.java:18772)
at com.android.providers.settings.SettingsService$MyShellCommand.onCommand(SettingsService.java:259)
at android.os.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:98)
at android.os.ShellCommand.exec(ShellCommand.java:44)
at com.android.providers.settings.SettingsService.onShellCommand(SettingsService.java:49)
at android.os.Binder.shellCommand(Binder.java:929)
at android.os.Binder.onTransact(Binder.java:813)
at android.os.Binder.execTransactInternal(Binder.java:1159)
at android.os.Binder.execTransact(Binder.java:1123)

Это ошибка в случае команды get: "settings get global Stay_on_ while_plugged_in"
Exception occurred while executing 'get':
java.lang.SecurityException: Permission Denial: getCurrentUser() from pid=32124, uid=10603 requires android.permission.INTERACT_ACROSS_USERS
at com.android.server.am.UserController.getCurrentUser(UserController.java:2168)
at com.android.server.am.ActivityManagerService.getCurrentUser(ActivityManagerService.java:18772)
at com.android.providers.settings.SettingsService$MyShellCommand.onCommand(SettingsService.java:259)
at android.os.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:98)
at android.os.ShellCommand.exec(ShellCommand.java:44)
at com.android.providers.settings.SettingsService.onShellCommand(SettingsService.java:49)
at android.os.Binder.shellCommand(Binder.java:929)
at android.os.Binder.onTransact(Binder.java:813)
at android.os.Binder.execTransactInternal(Binder.java:1159)
at android.os.Binder.execTransact(Binder.java:1123)


Подробнее здесь: https://stackoverflow.com/questions/693 ... in-android
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»