从活动中启动和停止DayDream服务的正确方法

时间:2016-10-31 12:39:05

标签: android android-activity android-service daydream

我正在开发一个应用程序,它应该在特殊情况下显示白日梦, 我到处寻找一个正确的方法来通过我的MainActivity课程开始我的白日梦服务,但没有运气,

目前我正在使用以下代码来启动白日梦,实际上它可行,但我需要一个更好的解决方案,它为我提供了一种方法来阻止白日梦。

 public void startDayDream(){
    final Intent intent = new Intent(Intent.ACTION_MAIN);
    try {
        // Somnabulator is undocumented--may be removed in a future version...
        intent.setClassName("com.android.systemui",
                "com.android.systemui.Somnambulator");
        intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        startActivity(intent);
    } catch (Exception e) { /* Do nothing */ }
}

1 个答案:

答案 0 :(得分:0)

我以相同的方式开始,但我没有找到任何正式的方式或意图来阻止白日梦。

然而,您可以通过重新获得活动的焦点来停止白日梦。为此,创建服务并在您想停止白日梦时将服务中的任何意图发送到您的活动。作为副作用,如果在背景中接收意图,您的活动将会出现在前面。这种方法至少适用于Android 4.4到5.1。

对于Android 6来说,它足以模拟唤醒以停止梦想。

    PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, "WakeUpLock");
    if (wakeLock.isHeld())
      wakeLock.release();
    wakeLock.acquire();
    wakeLock.release();