我需要有根的android平板电脑处于“kiosk模式”,所以通知栏应该被禁用(而不是像全屏游戏那样隐藏)。
此代码仅暂时隐藏条形图:
this.requestWindowFeature(Window.FEATURE_NO_TITLE); // Removes title bar
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.main); 当我把这个放在AndroidManifest的应用程序部分时,也是一样的:
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"我试图通过adb命令禁用android-ui。
pm disable com.android.systemui但我连导航按钮都没有!我只需要顶部的通知栏被封锁!
那么,我如何阻止不能打开通知栏呢?
发布于 2014-02-22 20:01:24
我知道,这不是这个问题的一般解决方案,但就我而言,我可以这样做。
我对SystemUI.apk进行了建模。
我删除了statusbar的背景,并将高度和宽度设置为内容视图的0倾角。
这只能是因为我只为我自己的同一套平板电脑提供我的应用程序!!
发布于 2014-02-19 11:40:29
据我所知,没有正式的方法来做到这一点,因为它可能被恶意使用,但这是我实现它的方式。它的工作原理是粗暴地杀死处理Nav/Action等的系统服务,但这是我唯一能找到的工作方法。
--这将阻塞所有的导航按钮、操作栏等。我不知道有什么方法只停止其中一个
hideNav()在主活动中被称为onCreate,showNav()是从onDestroy调用的,如果您想让管理员访问操作系统,就需要showNav(),因为除非您特别重新启动服务,否则您将无法在设备周围导航。
我的应用程序有一个退出按钮,只能用密码访问。该按钮调用getActivity().finish(),您需要调用该活动的onDestroy方法。
注意:我已经阅读过一些设备上的systemui服务并不总是42,所以您的平板电脑可能需要在命令中使用不同的数字。
public void hideNav()
{
Log.v(tag, "hideNav");
try
{
Process p;
p = Runtime.getRuntime().exec("su");
// Attempt to write a file to a root-only
DataOutputStream os = new DataOutputStream(p.getOutputStream());
os.writeBytes("service call activity 42 s16 com.android.systemui\n");
// Close the terminal
os.writeBytes("exit\n");
os.flush();
p.waitFor();
}
catch (Exception e)
{
Log.e(tag, "hideNav " + e.getMessage());
}
}
public void showNav()
{
Log.v(tag, "showNav");
try{
Process p;
p = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(p.getOutputStream());
os.writeBytes("am startservice -n com.android.systemui/.SystemUIService\n");
// Close the terminal
os.writeBytes("exit\n");
os.flush();
p.waitFor();
}catch (IOException e) {
e.printStackTrace();
Log.e(tag, "showNav " + e.getMessage());
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
Log.e(tag, "showNav " + e.getMessage());
}
}https://stackoverflow.com/questions/21877913
复制相似问题