我的主要目标是显示UI(使用EditText,因此支持IME)在锁定屏幕上(无论是否有PIN /代码或简单的锁定屏幕)。
我知道WhatsApp应用程序正在这样做(设置>通知>始终显示弹出窗口),因此有一个解决方案。
必须从服务初始化UI。
视图是一个简单的文本视图:
textview = new TextView(this);
textview.setText("Hello There!");
textview.setTextColor(ContextCompat.getColor(this,
android.R.color.white));
textview.setTextSize(32f);
到目前为止,我已经尝试了几种方法: (为了重现类似于应用程序,当屏幕关闭接收器时,我正在做所有事情)
使用WindowManager
WindowManager参数:
params = new 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
使用透明活动 活动风格:
真正 @android:彩色/透明 @空值 真正 真正 假
另外,还有android:showOnLockScreen =" true"属性
Result: TextView is shown only after we unlock the device
还有其他建议吗?
感谢。
答案 0 :(得分:4)
在您的活动的onCreate()
中添加:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
}