【问题标题】:Keep activity running over screen lock when the screens alseep当屏幕处于休眠状态时,保持活动在屏幕锁定上运行
【发布时间】:2012-07-17 18:05:19
【问题描述】:

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

我考虑并尝试收听Intent.ACTION_SCREEN_ON,但在用户按下手机上的电源按钮将其唤醒与应用加载并显示在屏幕上之间存在延迟。在此间隙期间,用户可以看到 android 操作系统

【问题讨论】:

    标签: android


    【解决方案1】:

    如果您使用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"
    

    【讨论】:

    • 我应该把 acquire()release() 放在哪里?我假设我的 onCreate() 中的 acquire()
    【解决方案2】:

    您可能想尝试的一种方法是确保您的应用永不休眠。在短暂的睡眠中,它将保持运行。在长时间睡眠时,您的应用程序本身处于睡眠状态。我可以通过使用 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();
    

    【讨论】:

    • 我试过了,但经过一段时间(大约 30 秒)后,活动仍然暂停、停止然后销毁
    • 使用它并在清单中设置 android:persistent="true" 可能是关键。
    • 你看过这个问题/答案stackoverflow.com/q/3629179/346309
    猜你喜欢
    • 2012-11-12
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多