使用 TYPE_PHONE 或 TYPE_TOAST 創建的懸浮窗可在普通界面顯示,但在鎖屏界面不顯示。
Android 版本對鎖屏窗口類型限制不同:
TYPE_SYSTEM_ALERT + SYSTEM_ALERT_WINDOW 權限。TYPE_APPLICATION_OVERLAY,鎖屏顯示需設置 FLAG_SHOW_WHEN_LOCKED + FLAG_TURN_SCREEN_ON + FLAG_KEEP_SCREEN_ON。ROLE_CALL_SCREENING 或使用 KeyguardManager 請求鎖屏顯示權限。WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ?
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY :
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
PixelFormat.TRANSLUCENT
);
// 設置 gravity、x、y 等
windowManager.addView(floatView, params);
TYPE_APPLICATION_OVERLAY。<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 並引導用戶授權。FLAG_SHOW_WHEN_LOCKED 等標志位。