唤醒锁无法保持应用程序运行

时间:2013-09-30 20:26:20

标签: android wakelock

当屏幕超时或用户按下电源按钮关闭屏幕时,我希望声音在我的应用中播放。

@Override
public void onCreate(Bundle savedInstanceState) {
    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, 
            "Wake lock");
    wl.acquire();
    super.onCreate(savedInstanceState);
    setContentView(R.layout.paint);

}

这是我活动的onCreate。在此下方有一个onClick开关语句,用于监听要单击的按钮,单击该按钮时会播放声音。它不会发布新活动,只播放声音。当用户按下电源按钮或屏幕超时时声音停止,这不是我想要的。我希望它在用户锁定屏幕或发生超时时播放。我也重新检查了清单,它有适当的许可。

2 个答案:

答案 0 :(得分:0)

我的应用程序使用AudioTrack和SoundPool进行音频播放,我以与发布完全相同的方式获取PARTIAL_WAKE_LOCK,这足以在屏幕关闭时保持声音输出正常工作。你能否确认你的清单文件中有WAKE_LOCK权限?

<uses-permission android:name="android.permission.WAKE_LOCK" />

如果这没有帮助,请提供有关您正在执行播放的详细信息。是来自服务吗?

答案 1 :(得分:0)

啊,谢谢你提供额外的信息。在“活动”中执行声音播放不是正确的方法,因为在屏幕关闭时您的“活动”将暂停。对于后台任务 - 比如播放声音 - 您应该使用服务。这是一个教程,作为阅读有关Android服务的起点: http://www.vogella.com/articles/AndroidServices/article.html

实施服务后,让它在启动时获得唤醒锁定,并且在完成后不要忘记释放()唤醒锁定。

此外,在声音播放的情况下,您应将其作为“前台”服务运行。这将告诉Android不要暂停或终止它,因为它是用户交互的一部分。它还会在通知抽屉中创建一个列表,供用户在离开时导航回您的活动。更多阅读: http://developer.android.com/guide/components/services.html#Foreground