我需要在任何正在運行的應用程序之上顯示系統覆蓋窗口。它工作正常,但只有當我的應用程序的活動在前臺。下面是我的代碼使用方法:Android系統覆蓋圖未顯示在我的應用程序之外
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE |
WindowManager.LayoutParams.FLAG_DIM_BEHIND |
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.CENTER | Gravity.TOP;
params.dimAmount = 0.3f;
wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
mainAlertView = View.inflate(ctx, R.layout.system_alert_view, null);
wm.addView(mainAlertView, params);
視圖添加到窗口管理器包含了空的LinearLayout,而我在運行時添加子視圖:
mainAlertLayout.addView(childView);
清單XML定義SYSTEM_ALERT_WINDOW
權限:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
當我的活動在前臺運行時,這一切都非常有效。只要我切換到任何其他應用程序或主屏幕,不顯示重疊。我調試了代碼,它確實運行了wm.addView(),並且沒有拋出任何異常。我也玩過LayoutParams標誌(刪除KEEP_SCREEN_ON和相關的等),但沒有任何區別。
的是Android 4.4.2 FWIW
我記得,當我試圖做的那些東西,只要我還記得,在'上下文'必須是應用程序上下文。我不能成爲活動。你在用什麼? – Budius
「ctx」包含主要活動getApplicationContext()返回的內容,即調用 – rootkit
即應用程序上下文。祝你好運。 – Budius