删除Android导航和顶部栏,

我试图在root设备上实现一个Kiosk应用程序,我需要完全禁用导航和状态栏。

这些命令适用于adb shell

禁用:

service call activity 42 s16 com.android.systemui 

启用:

 am startservice -n com.android.systemui/.SystemUIService 

非常好! 现在我需要能够从我的应用程序中执行此操作。 所以禁用我试过:

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

在我的活动中按下按钮时。 但没有任何反应,也没有例外。 一个吐司突然出现,说该应用程序已获得超级用户权限。

有任何想法吗?

要运行su cmd,您可以使用它

 public static void runCmd(String cmd) { DataOutputStream os; try { Process process = Runtime.getRuntime().exec("su"); os = new DataOutputStream(process.getOutputStream()); os.writeBytes(cmd + "\n"); os.writeBytes("exit\n"); os.flush(); os.close(); } catch (IOException e) { e.printStackTrace(); } } 

要禁用系统ui,您可以运行此命令

 runCmd("pm disable com.android.systemui && service call activity 42 s16 com.android.systemui"); 

如果要启用后退

 runCmd("pm enable com.android.systemui && am startservice -n com.android.systemui/.SystemUIService"); 

拆分su调用和命令调用:

 try{ Process su = Runtime.getRuntime().exec("su"); DataOutputStream outputStream = new DataOutputStream(su.getOutputStream()); outputStream.writeBytes("service call activity 42 s16 com.android.systemui"); outputStream.flush(); outputStream.writeBytes("exit\n"); outputStream.flush(); su.waitFor(); }catch(IOException e){ throw new Exception(e); }catch(InterruptedException e){ throw new Exception(e); } 

使用Android 5和6,您可以尝试这个技巧:

 settings put secure user_setup_complete 0