Исключение при выполнении команды "положить"
Я пытаюсь запустить команду оболочки adb программно через приложение, чтобы изменить значение переменной rtt_calling_mode, но я столкнулся с этой ошибкой.
Exception occurred while executing 'put':
java.lang.NullPointerException
at java.util.Objects.requireNonNull(Objects.java:220)
at com.android.server.appop.AppOpsService.checkPackage(AppOpsService.java:2969)
at android.app.AppOpsManager.checkPackage(AppOpsManager.java:7697)
at android.content.ContentProvider.getCallingPackage(ContentProvider.java:954)
at com.android.providers.settings.SettingsProvider.mutateSecureSetting(SettingsProvider.java:1732)
at com.android.providers.settings.SettingsProvider.insertSecureSetting(SettingsProvider.java:1652)
at com.android.providers.settings.SettingsProvider.call(SettingsProvider.java:412)
at android.content.ContentProvider.call(ContentProvider.java:2448)
at android.content.ContentProvider$Transport.call(ContentProvider.java:517)
at com.android.providers.settings.SettingsService$MyShellCommand.putForUser(SettingsService.java:375)
at com.android.providers.settings.SettingsService$MyShellCommand.onCommand(SettingsService.java:277)
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)
При работе на A10 я смог отлично выполнить эту команду, и она изменила бы переменную RTT, как если бы я запустил команду «adb shell settings put secure rtt_calling_mode0 1» через командную строку. Но теперь на сборке A11 я получаю эту ошибку. Я не уверен, что могло быть причиной этой проблемы и почему теперь у нее есть проблема с 'put'. Также не уверен, откуда исходит исключение NullPointerException. Кто-нибудь знает, что может вызвать эту проблему? Ниже приведен код, который выдает ошибку при запуске.
public static String setRealTimeText(int simSlot, int enabled){
String command = "settings put secure rtt_calling_mode" + slot + " " + enabled;
try {
Process process = Runtime.getRuntime().exec(command);
BufferedReader output = new BufferedReader(new InputStreamReader(process.getInputStream()));
BufferedReader errorOutput = new BufferedReader(new InputStreamReader(process.getErrorStream()));
//get the error output
String s = "";
String outputString = "";
if (errorOutput.readLine() != null) {
while ((s = errorOutput.readLine()) != null) {
outputString += " " + s + "\n";
}
return outputString;
}
//get the console output
while ((s = output.readLine()) != null) {
outputString += "- " + s + "\n";
}
return "RTT was enabled"
} catch (Exception e) {
e.printStackTrace();
return e.toString();
}
}
1 ответ
Если вам не нужно запускать команду оболочки, вы можете сделать это программно
Settings.Secure.putInt(getContentResolver(), Settings.Secure.RTT_CALLING_MODE, 1);
Но для этого вам нужен root-доступ. Только системные приложения имеют разрешение на изменение настроек безопасности. Это также может быть причиной исключения при выполнении команды оболочки.