阻止通知栏

时间:2014-02-19 10:36:34

标签: android android-notification-bar

我需要我的root平板电脑平板电脑处于“自助服务终端模式”,因此通知栏应该被禁用(而不仅仅是隐藏在例如全屏游戏中)。

此代码仅暂时隐藏栏:

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

但是我没有任何导航按钮!我只需要顶部的通知栏被阻止!

那么如何阻止通知栏无法打开?

2 个答案:

答案 0 :(得分:2)

据我所知,没有正式的方法可以做到这一点,因为它可以被恶意使用,但这就是我实现它的方式。它的工作原理是粗暴地杀死处理导航/操作栏等的系统服务。但是我唯一可以找到它的东西。

这将阻止所有导航按钮,操作栏等。我不知道只能阻止其中一个

hideNav()在主活动中调用onCreate,并且从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());
    }
}

答案 1 :(得分:2)

我知道,这不是解决这个问题的一般方法,但就我而言,我可以这样做 我修改了SystemUI.apk。

我删除了状态栏的背景,并将高度和宽度设置为内容视图的0dip。

这只能这样做,因为我只为我自己的相同平板电脑服务我的应用程序!!