1

我正在开发一个应该在特殊情况下显示白日梦的应用程序,我到处搜索以找到一种通过我的 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 */ }
}
4

1 回答 1

2

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

但是,您可以通过活动重新集中注意力来停止白日梦。为此,当您想停止白日梦时,创建一个服务并将任何意图从您的服务发送到您的活动。作为副作用,如果您的活动在后台接收意图,您的活动将出现在最前面。这种方法至少适用于 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();
于 2016-11-04T20:19:01.197 回答