我试图在屏幕锁定时显示活动。我正在后台运行一个服务,当事件发生时,我想打开一个活动,即使应用程序被锁定(类似于闹钟应用程序,它唤醒屏幕并显示其活动)。我遵循了以下步骤,
当调用OnReceive()时,我希望在锁定屏幕上打开Activity。
public void OnReceive() {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "myalarmapp:alarm.");
wl.acquire(5000);
Intent startAlarmActivity = new Intent(MainScreen.this, AcceptScreen.class);
startActivity(startAlarmActivity);
wl.release();
}
在Activity的onCreate方法中添加了下面的代码,我想展示一下,
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
setShowWhenLocked(true);
setTurnScreenOn(true);
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
keyguardManager.requestDismissKeyguard(this, null);
}
else {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
在清单中添加了我想要显示的活动,
<activity
android:name=".v2.ui.orderaccept.AcceptScreen"
android:exported="true"
android:label="@string/title_activity_accept_screen"
android:theme="@style/AppTheme.NoActionBar"
android:showOnLockScreen="true"
android:screenOrientation="sensorPortrait"/>
当手机没有锁屏密码时,它正按预期工作。但是当锁屏有密码的时候就不起作用了。
2条答案
按热度按时间kninwzqo1#
最后,我得到了解决方案。
在Activity的onCreate方法中添加以下代码,以便在锁定屏幕上显示,
清单
叫活动
kgsdhlau2#
干得好!它工作得很完美,没有任何特殊授权。所有我需要的:-)非常感谢