Я хочу программно прочитать глобальные настройки в 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
«Глобальный список настроек оболочки adb» не работает программно в Android ⇐ Android
Форум для тех, кто программирует под Android
1767913510
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);
}
}
[b]ОБНОВЛЕНИЕ от 30 сентября 2021 г.:[/b]
Благодаря комментарию @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)
Подробнее здесь: [url]https://stackoverflow.com/questions/69371936/adb-shell-settings-list-global-doesnt-work-programatically-in-android[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия