以编程方式禁用系统栏(具有根访问权限)

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