以编程方式禁用系统栏(具有根访问权限)
Programatically disable System Bar (Have Root access)
我可以通过终端客户端使用以下 adb 命令禁用系统栏:
adb shell service call activity 42 s16 com.android.systemui
但是,我想以编程方式实现这一点。我查找了如何以编程方式执行 adb 命令并找到以下代码:
Process process = Runtime.getRuntime().exec("your command");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
我用上面的 adb 命令替换了 "your command",但它没有禁用系统栏。我怎样才能做到这一点?
您需要 root 权限才能从应用程序执行此操作,因为 ADB 可以访问 /system/bin/service 但您的应用程序不能(请参阅应用程序和 ADB 的 GID)。
Process su = null;
try {
su = Runtime.getRuntime().exec("su");
String cmd = "service call activity 42 s16 com.android.systemui\n";
su.getOutputStream().write(cmd.getBytes());
String exit = "exit\n";
su.getOutputStream().write(exit.getBytes());
su.waitFor();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (su != null) {
su.destroy();
}
}
您还应该查看第三方库来处理 su 命令:https://android-arsenal.com/details/1/451
我可以通过终端客户端使用以下 adb 命令禁用系统栏:
adb shell service call activity 42 s16 com.android.systemui
但是,我想以编程方式实现这一点。我查找了如何以编程方式执行 adb 命令并找到以下代码:
Process process = Runtime.getRuntime().exec("your command");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
我用上面的 adb 命令替换了 "your command",但它没有禁用系统栏。我怎样才能做到这一点?
您需要 root 权限才能从应用程序执行此操作,因为 ADB 可以访问 /system/bin/service 但您的应用程序不能(请参阅应用程序和 ADB 的 GID)。
Process su = null;
try {
su = Runtime.getRuntime().exec("su");
String cmd = "service call activity 42 s16 com.android.systemui\n";
su.getOutputStream().write(cmd.getBytes());
String exit = "exit\n";
su.getOutputStream().write(exit.getBytes());
su.waitFor();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (su != null) {
su.destroy();
}
}
您还应该查看第三方库来处理 su 命令:https://android-arsenal.com/details/1/451