Android 4.2.2平板電視隱藏系統底部狀態列

Android4.2.2平板電視隱藏系統底部狀態列
Android開發者們都在處理9.0的相容問題了,而我今天卻在折騰4.2.2平板電視的底部狀態列隱藏問題。
前段時間幫另一個專案組同事搭的一個簡易h5殼app這幾天又讓幫忙處理全屏問題。最初是隱藏了頂部狀態列,現在又要求隱藏底部虛擬按鍵。於是,唰唰唰,出現下面程式碼:
/** * 隱藏底部虛擬按鍵,且全屏 */ private void hideBottomMenu() { //隱藏虛擬按鍵,並且全屏 if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api View v = this.getWindow().getDecorView(); v.setSystemUiVisibility(View.GONE); } else if (Build.VERSION.SDK_INT >= 19) { //for new api versions. View decorView = getWindow().getDecorView(); int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions); } }
將其放在onCreate中,Android6.0手機上測試,一切正常,可以隱藏,唯一的不足是點選屏幕後底部虛擬按鍵又出現了,而且背景是透明度漸變的。於是又通過攔截touch事件,解決了點選這一問題。
但是,將app安裝到 平板電視 後,發現虛擬按鍵隱藏不了。平板電視是基於 4.2.2 定製的系統,於是網上找相關資料,嘗試了幾種,最終發現可以通過命令列程式碼來實現隱藏與顯示。
隱藏底部虛擬按鈕
/** * 關閉Android導航欄,實現全屏 */ private void closeBar() { try { String command; command = "LD_LIBRARY_PATH=/vendor/lib:/system/lib service call activity 42 s16 com.android.systemui"; ArrayList<String> envlist = new ArrayList<String>(); Map<String, String> env = System.getenv(); for (String envName : env.keySet()) { envlist.add(envName + "=" + env.get(envName)); } String[] envp = envlist.toArray(new String[0]); Process proc = Runtime.getRuntime().exec( new String[] { "su", "-c", command }, envp); proc.waitFor(); } catch (Exception ex) { e.printStackTrace(); } }
顯示底部虛擬按鈕
由於是通過命令列su指令實現隱藏虛擬按鈕,如果不主動去顯示,則即使退出app,虛擬按鈕仍然是隱藏的。所以,我們需要在退出app時,主動顯示虛擬按鈕,可以通過onDestory或者onStop或finish中呼叫以下方法實現。
/** * 顯示導航欄 */ public static void showBar() { try { String command; command = "LD_LIBRARY_PATH=/vendor/lib:/system/lib am startservice -n com.android.systemui/.SystemUIService"; ArrayList<String> envlist = new ArrayList<String>(); Map<String, String> env = System.getenv(); for (String envName : env.keySet()) { envlist.add(envName + "=" + env.get(envName)); } String[] envp = envlist.toArray(new String[0]); Process proc = Runtime.getRuntime().exec( new String[] { "su", "-c", command }, envp); proc.waitFor(); } catch (Exception e) { e.printStackTrace(); } } }
原文:簡書ThinkinLiu 部落格: ofollow,noindex">IT老五
以上程式碼可以實現4.2.2平板電視上對底部虛擬按鍵的隱藏與顯示,再次強調下:通過該方法隱藏虛擬按鍵,退出app後虛擬按鍵是不會主動出現的,請在不需要全屏的時候或者退出app的時候主動呼叫顯示虛擬按鍵。