2014-02-19 74 views
3

我需要将我的rooted android平板电脑设置为“信息亭模式”,因此应禁用通知栏(而不是像在全屏游戏中那样隐藏)。阻止通知栏

此代码隐藏酒吧只是暂时的:

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" 

我试图禁用android-由adb命令的UIi

pm disable com.android.systemui 

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

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

回答

2

我知道,这不是一个通用的解决方案,但在我的情况下,我可以这样做。
我修改了SystemUI.apk。

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

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

2

据我所知,没有官方的方式来做到这一点,因为它可以被恶意使用,但这是我已经实现的方式。它通过粗鲁地杀死处理导航栏/操作栏等的系统服务而工作。原油但它是唯一能找到的工作。

这将阻止所有的导航按钮,操作栏等。我不知道一个办法只有停)这些

hideNav之一(被称为的onCreate中的主要活动,并showNav ()是从onDestroy调用的,如果您想要管理员访问操作系统的方式,您将需要使用该方法,因为除非专门重新启动服务,否则您将无法在设备上浏览。

我的应用程序有一个退出按钮,只能用密码访问。该按钮调用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()); 
    } 
} 
+0

基本上,这和我的文章中的第三个代码段完全相同。有没有办法只禁用通知栏? – user2737037

+0

啊,是的,我没有发现第三个片段。据我所知,没有办法只禁用通知栏。我也考虑过这一点,它似乎唯一的办法是更改android源代码并使用自定义ROM刷新平板电脑。如果有更简单的解决方案,我会对此感兴趣。 – CurlyPaul