当屏幕处于睡眠状态时,保持活动在屏幕锁定上运行

时间:2012-07-18 16:17:09

标签: android

所以我构建了一个可以作为锁屏更换的应用程序。我使用广播接收器和服务在Intent.ACTION_SCREEN_OFF之后开始我的活动。因此,每当用户锁定屏幕时,我的活动就会启动,然后当他们按下解锁按钮时,我的活动已经在锁定屏幕上运行。但这仅在用户尝试在短时间内唤醒/解锁手机时才有效。如果他们等待太久,活动就会消失。我不确定为什么会发生这种情况以及无论用户等待多长时间尝试解锁手机,我都可以做些什么来保持活动。

我想过并试着听Intent.ACTION_SCREEN_ON,但是当用户按下手机上的电源按钮唤醒它以及应用程序加载并显示在屏幕上时会有一段延迟。在此间隙期间,用户可以看到Android OS

2 个答案:

答案 0 :(得分:3)

如果您使用wakelock怎么办?例如:

@Override
public void onCreate(Bundle savedInstanceState) { 
    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
    wl.acquire();
    // do your things, even when screen is off
}


@Override
protected void onDestroy() {
    wl.release();
}

您还必须获得一个唤醒锁许可AndroidManifest.xml

uses-permission android:name="android.permission.WAKE_LOCK"

答案 1 :(得分:1)

您可能想要尝试的一种方法是确保您的应用从不睡觉。在短暂的睡眠中,它将继续运行。长时间睡眠你的应用程序本身就是睡着了。我能够使用PowerManager.Wakelock解决这个问题。唯一的问题是,如果您的应用使用cpu周期,这将耗尽更多电量。

/** wake lock on the app so it continues to run in background if phone tries to sleep.*/
PowerManager.WakeLock wakeLock;

@Override
public void onCreate(Bundle savedInstanceState) {
    ...

    // keep the program running even if phone screen and keyboard go to sleep
    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);

    ...
}

// use this when screen sleeps
wakeLock.acquire();

// use this once when phone stops sleeping
wakeLock.release();