扎根Android Nexus 7 Lollipop禁用SystemUI(系统+导航栏)(C#for Xamarin)

时间:2015-03-06 17:32:24

标签: android xamarin xamarin.android root statusbar

我使用以下代码禁用4.4 nexus设备上的导航栏和状态栏

    try {
            proc = Runtime.getRuntime().exec(new String[] { "su", "-c", "service call activity 42 s16 com.android.systemui" });
        } catch (Exception e) {
            Log.w("Main","Failed to kill task bar (1).");
            e.printStackTrace();
        }
        try {
            proc.waitFor();
        } catch (Exception e) {
            Log.w("Main","Failed to kill task bar (2).");
            e.printStackTrace();
        }

像魅力一样工作。但是,当我尝试在My Nexus 7上执行相同操作时。屏幕变黑,我无法看到我的应用程序活动。

我在这里做错了吗?是android 5.0的命令不同吗?

两个设备都是root

1 个答案:

答案 0 :(得分:0)

找到答案,上面的代码对Lollipop不起作用。以下代码适用于较旧和较新版本的Android(在5.0和4.4上测试)。

private void systemUIEnabled(System.Boolean enabled){

        try {

            Java.Lang.Process  process = Runtime.GetRuntime().Exec("su");
            DataOutputStream os = new DataOutputStream(process.OutputStream);
            os.WriteBytes("pm " + (enabled ? "enable" : "disable") 
                + " com.android.systemui\n");
            os.WriteBytes("exit\n");

            Toast.MakeText (this, " UI Update , Post Reboot", ToastLength.Long).Show ();
            os.Flush();
        } catch (IOException e) {
            e.PrintStackTrace();
            Toast.MakeText (this, " UI Update , Error", ToastLength.Long).Show ();
        }

    }

更新:

以上解决方案是Xamarin的C#。以下是Java代码

public void setSystemUIEnabled(boolean enabled){
try {
    Process p = Runtime.getRuntime().exec("su");
    DataOutputStream os = new DataOutputStream(p.getOutputStream());
    os.writeBytes("pm " + (enabled ? "enable" : "disable") 
            + " com.android.systemui\n");
    os.writeBytes("exit\n");
    os.flush();
} catch (IOException e) {
    e.printStackTrace();
}