在锁定屏幕上显示UI(活动/ WindowManager)&在奥利奥的支持

时间:2018-01-09 14:31:13

标签: android android-layout android-windowmanager

我的主要目标是显示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
    

还有其他建议吗?

感谢。

1 个答案:

答案 0 :(得分:4)

在您的活动的onCreate()中添加:

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
}