如何在Android设备设置密码后在锁屏界面上显示活动。

6
我希望在屏幕锁定时显示一个活动。我正在后台运行一个服务,当事件发生时,即使应用程序已锁定(类似于闹钟应用程序唤醒屏幕并显示其活动),我也想打开一个活动。 我遵循以下步骤,当OnReceive()被调用时,我希望在锁屏界面上打开活动。
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();
        }

在活动的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个回答

8

最终,我找到了解决方案。

在您想要在锁定屏幕上显示的活动的onCreate方法中添加以下代码:

final Window win = getWindow();
    win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
        win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
                | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
                | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_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:launchMode="singleInstance"/>

调用该活动,

val intent = Intent(context, targetclass)
        intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
        startActivity(intent)
    

这个能在最新的SDK上运行吗? - Samudra Ganguly
1
非常感谢!这对我帮助很大。Google真的让开发者们费尽心思才能弄清楚如此基本的事情。 - Sandeep
这个工作吗?在锁屏界面上不起作用。 - undefined

0

干得好!它完美地运行,而且没有任何特殊的授权。这就是我需要的 :-) 非常感谢


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接