在锁定屏幕上显示 UI (Activity/WindowManager) 并支持 Oreo
Show UI (Activity/WindowManager) over lock screen & support in Oreo
我的主要目标是在锁定屏幕上显示 UI(使用 EditText,因此支持 IME)(无论是否有 PIN/Code 或简单的锁定屏幕)。
我知道 WhatsApp 应用程序正在执行此操作(设置 > 通知 > 始终显示弹出窗口),因此有一个解决方案。
UI 必须从服务初始化。
视图是一个简单的文本视图:
textview = new TextView(this);
textview.setText("Hello There!");
textview.setTextColor(ContextCompat.getColor(this,
android.R.color.white));
textview.setTextSize(32f);
到目前为止我已经尝试了几种方法:
(为了像 whats app 一样重现,当屏幕关闭接收器被调用时我正在做所有事情)
使用 WindowManager
WindowManager 参数:
参数=新的WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.BOTTOM;
params.screenBrightness = 0;
Result: TextView is shown only after we unlock the device
使用透明activity
Activity风格:
真的
@android:color/transparent
@无效的
真的
真的
错误的
还有,有android:showOnLockScreen="true"属性
Result: TextView is shown only after we unlock the device
还有其他建议吗?
谢谢。
将此添加到您的 Activity 的 onCreate()
中:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
}
我的主要目标是在锁定屏幕上显示 UI(使用 EditText,因此支持 IME)(无论是否有 PIN/Code 或简单的锁定屏幕)。
我知道 WhatsApp 应用程序正在执行此操作(设置 > 通知 > 始终显示弹出窗口),因此有一个解决方案。
UI 必须从服务初始化。
视图是一个简单的文本视图:
textview = new TextView(this);
textview.setText("Hello There!");
textview.setTextColor(ContextCompat.getColor(this,
android.R.color.white));
textview.setTextSize(32f);
到目前为止我已经尝试了几种方法: (为了像 whats app 一样重现,当屏幕关闭接收器被调用时我正在做所有事情)
使用 WindowManager
WindowManager 参数:
参数=新的WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, PixelFormat.TRANSLUCENT); params.gravity = Gravity.BOTTOM; params.screenBrightness = 0;
Result: TextView is shown only after we unlock the device
使用透明activity Activity风格:
真的 @android:color/transparent @无效的 真的 真的 错误的
还有,有android:showOnLockScreen="true"属性
Result: TextView is shown only after we unlock the device
还有其他建议吗?
谢谢。
将此添加到您的 Activity 的 onCreate()
中:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
}