2014-02-19 72 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