Android活动超过默认锁定屏幕

plu*_*ind 72 android dialog lockscreen android-windowmanager android-activity

如何在锁定屏幕上显示ActivityDialog显示?

通过在Activity.onCreate()方法中设置各种窗口类型,我已经尝试在屏幕打开时显示我的锁定活动:

TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_KEYGUARD

和其他人一起SYSTEM_ALERT_WINDOWINTERNAL_SYSTEM_WINDOW权限.

解锁设备后,我的活动可见.

更新:

我实际上已经设法显示我自己的Activity而不是默认锁定屏幕.除非您使用HOME按钮,否则它可以完美运行

Ene*_*nes 117

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON|
            WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD|
            WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|
            WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
Run Code Online (Sandbox Code Playgroud)

尝试使用此标志在活动开始时禁用锁定屏幕.

在API级别17之后,您可以使用

<activity
        android:name=".yourActivityName"
        android:showOnLockScreen="true"
        android:screenOrientation="sensorPortrait" >
Run Code Online (Sandbox Code Playgroud)

像示例中的showOnLockScreen ...

  • 问题是,至少在4.4上,当锁定屏幕上设置了密码时,这不起作用.有谁知道如何保持锁定屏幕,但仍然能够显示对话框? (6认同)
  • 在我的情况下不工作,是否需要特殊许可? (4认同)
  • 这甚至不需要任何权限.奇怪. (2认同)
  • 在锁定屏幕的自定义活动的情况下,有谁知道如何拒绝主页按钮?主页按钮只是关闭活动并带到主屏幕. (2认同)

Shi*_*ade 32

不要去活动,因为安全原因,android不会在你的活动后面显示锁屏,所以使用服务代替Activity.

下面是我服务的onStartCommand中的代码.

WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

View mView = mInflater.inflate(R.layout.score, null);

WindowManager.LayoutParams mLayoutParams = new WindowManager.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT, 0, 0,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
    | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
    | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
/* | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON */,
PixelFormat.RGBA_8888);

mWindowManager.addView(mView, mLayoutParams);
Run Code Online (Sandbox Code Playgroud)

并添加<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />到清单

  • 非常感谢! (2认同)

Sar*_*CSE 19

在onCreate方法中使用它

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);  
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
// This line should be before setContentView..      
setContentView(......);
Run Code Online (Sandbox Code Playgroud)

希望这会工作谢谢