【问题标题】:Start activity when screen is off屏幕关闭时启动活动
【发布时间】:2014-07-18 22:08:45
【问题描述】:

我已经设置了一个 AlarmManager 来启动一个活动。此 Activity 还会播放声音,类似于闹钟应用或来电。

如果屏幕处于开启状态,即使屏幕被锁定也可以正常工作。

如果屏幕关闭,它根本不起作用。我尝试使用以下内容作为 onCreate 中的第一件事

getWindow().setFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON,  WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

如果未启用屏幕锁定,这会打开屏幕,我可以看到我的活动正在关闭。我听不到播放的声音。如果启用了屏幕锁定,则屏幕根本不会打开。

有时我会得到以下信息,但并非总是如此:

07-18 23:52:13.685: E/OpenGLRenderer(14148):   GL_INVALID_OPERATION

如何让它在屏幕关闭时正常启动?

【问题讨论】:

    标签: android android-activity screen alarmmanager alarm


    【解决方案1】:

    我的部分答案来自here

            lock = ((KeyguardManager) getSystemService(Activity.KEYGUARD_SERVICE)).newKeyguardLock(KEYGUARD_SERVICE);
            powerManager = ((PowerManager) getSystemService(Context.POWER_SERVICE));
            wake = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG");
    
            lock.disableKeyguard();
            wake.acquire();
    
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                    | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
                    | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
                    | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
                    | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
    

    【讨论】:

      【解决方案2】:

      不久前,我读到您的应用必须全屏显示,FLAG_TURN_SCREEN_ON 才能工作。

      "** 一个重要提示。您的活动必须全屏才能使上述标志组合起作用。在我的应用程序中,我尝试将这些标志与非全屏活动(对话框主题)一起使用,但它没有不行。查看文档后,我发现这些标志要求窗口是全屏窗口。 -Wake Android Device up

      引用某人发布的关于 FLAG_X 的类似问题。

      【讨论】:

      • 不走运,同样的行为。屏幕会及时打开以查看我的活动结束
      • 听起来您在启用屏幕锁定时遇到了问题。希望这可以解决这个问题。如果您的应用程序在手机唤醒时关闭,则让运行时功能检查屏幕在执行之前是否已唤醒。或者转向@jgriffsta 的方法,因为它也可以。
      【解决方案3】:

      查看运行服务,活动将在不在前台时停止。

      还要查看 Activity 生命周期。 http://developer.android.com/reference/android/app/Activity.html

      【讨论】:

      • 那么该活动是否启动了应该启动该活动的服务?那会有什么不同吗?打开屏幕会发生在哪里?
      • Mainactivity 启动服务。当屏幕关闭时,服务仍然在后台运行。然后服务可以显示通知/启动活动等
      • 所以你的意思是使用服务而不是警报。好吧,我选择警报的原因是该活动可能会在一天甚至几天内显示,因此让服务在后台运行这么长时间是没有意义的。另外,它被系统杀死的机会也较小
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 2015-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多