0

有誰知道檢測狀態欄是否從輔助功能服務可見的任何好方法? (具體來說,檢測鎖定屏幕和通知面板之間的差異,或最近的應用程序屏幕和音量彈出)從輔助功能服務中檢測狀態欄的可見性

我已經添加了一個視圖,通過WindowManager檢測佈局更改並將其高度與屏幕,但是這在任何情況下都不起作用。

我還沒有找到任何可靠的方法來檢測哪個systemui屏幕是哪個或是否狀態欄在其中任何一個可見。通知面板通常具有類名「android.widget.FrameLayout」,這是我一直用來檢測它到現在爲止,但這有時會誤識別鎖定屏幕或音量彈出窗口作爲通知面板。只要找出ComponentName是否導致活動就足以排除鎖定屏幕(主要)和最近的應用程序。但是,音量面板有時會顯示在狀態欄上,有時會根據製造商顯示在下面(我想避免必須以任何費用製作不同設備的數據庫)。我似乎也無法檢測到音量面板關閉;我只在打開時收到一個事件。

如果我能得到可訪問事件源的主題,我可能會使用'android:windowFullscreen'屬性來解決整個問題,但我只找到了一種方法來執行此操作。如果你想看看我正在工作的略有混亂的源代碼,這裏的鏈接:https://github.com/TheAndroidMaster/Status

回答

0

我已經想出了一個臨時解決方案,使用android.media.VOLUME_CHANGED_ACTION廣播(這也是在打開音量面板時發送)並延遲運行。

由於音量更改操作僅在棒棒糖上發送,對於其他設備,我等待接收到輔助功能事件,然後檢查AccessibilityEvent.getText()是否包含單詞'volume'。這可能會在某些非庫存設備上失敗。然而,這個詞在Android的所有股票版本中 - 即使默認語言不是英語。它還檢查「隱藏」這個詞是否包含在內,因爲可用性事件在牛軋糖上發送了兩次。這是一個適度可靠的解決方案,應該可以正常工作,直到找到更好的方法。