如何显示活动在锁定屏幕上当密码设置在Android

vnzz0bqm  于 2023-05-12  发布在  Android
关注(0)|答案(2)|浏览(155)

我试图在屏幕锁定时显示活动。我正在后台运行一个服务,当事件发生时,我想打开一个活动,即使应用程序被锁定(类似于闹钟应用程序,它唤醒屏幕并显示其活动)。我遵循了以下步骤,
当调用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"/>

当手机没有锁屏密码时,它正按预期工作。但是当锁屏有密码的时候就不起作用了。

kninwzqo

kninwzqo1#

最后,我得到了解决方案。
在Activity的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)
kgsdhlau

kgsdhlau2#

干得好!它工作得很完美,没有任何特殊授权。所有我需要的:-)非常感谢

相关问题