我已经设置了一个AlarmManager来启动一个活动。此活动还会播放声音,类似于闹钟应用或来电。
如果屏幕打开,即使屏幕已锁定,也可以正常工作。
如果屏幕关闭,则根本不起作用。我尝试使用以下内容作为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
如何在屏幕关闭时正常启动?
答案 0 :(得分:5)
我的答案部分来自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);
答案 1 :(得分:1)
前段时间我读到你的应用必须全屏显示FLAG_TURN_SCREEN_ON才能正常工作。
" **一个重要的注意事项。您的活动必须全屏,以便上述标志组合起作用。在我的应用程序中,我尝试将这些标志用于不是全屏的活动(对话主题)并且它不起作用。在查看文档后,我发现这些标志要求窗口是一个全屏窗口。" - Wake Android Device up
引自与FLAG_X发布类似问题的人。
答案 2 :(得分:1)
考虑运行服务,活动将在不在前台时停止。
另请参阅活动生命周期。 http://developer.android.com/reference/android/app/Activity.html