4

我在 4.3 上有一个扎根的 Nexus 10,并且使用以下代码隐藏系统栏可以正常工作:

Process proc = Runtime.getRuntime().exec(new String[]{"su","-c","service call activity "+ ProcID +" s16 com.android.systemui"}); //WAS 79
proc.waitFor();

但是当我尝试使用以下代码取消隐藏它时,它永远不会取消隐藏:

Process proc = Runtime.getRuntime().exec(new String[]{"am","startservice","-n","com.android.systemui/.SystemUIService"});
proc.waitFor();

如果我从 adb shell 发出“am”命令,它会像宣传的那样工作(系统栏重新出现)。根调用周围有一个 try/catch,也不例外。我从“am”中得到一个“1”的完成代码。

隐藏和显示在同一个应用程序中的两个不同活动中,尽管我不明白为什么这很重要。

对于那些感兴趣的人,这是一个自助服务终端应用程序,在该应用程序运行时栏需要消失,然后在应用程序从隐藏菜单退出时重新出现。

谢谢!

4

1 回答 1

4

在互联网上进行了大量搜索后,我设法让系统栏隐藏并出现在 4.2 设备中,使用:

隐藏:

Runtime.getRuntime().exec("service call activity 42 s16 com.android.systemui");

或者对于小于 14 的 API 使用 79 而不是 42。您可能还需要包含 SET_DEBUG_APP 权限,在这种情况下,您需要使用系统密钥对应用程序进行签名或安装在 /system/app/ 目录中。

以显示:

Runtime.getRuntime().exec("am startservice --user 0 -n com.android.systemui/.SystemUIService");

或者,有些人使用了 -a(而不是 -n)选项,尽管这导致我的设备出现错误:

错误:未找到;没有服务启动。

于 2013-10-15T04:55:19.843 回答