2013-09-30 72 views
0

当屏幕超时或用户按下电源按钮以关闭屏幕时,我希望在应用程序中播放声音。唤醒锁定未能保持应用程序运行

@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开关语句,用于监听要点击的按钮,并在点击该按钮时播放声音。它不启动新的活动,只是播放声音。当用户点击电源按钮或屏幕时间时,声音停止,这不是我想要的。我希望它在用户锁定屏幕或发生超时时播放。我也重新检查了清单,并且有适当的许可。

+0

这通常是什么服务。 – Geobits

回答

0

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

您实现您的服务后,把它拿到唤醒锁启动时,不要忘记释放()之后锁定时,饰面。

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

0

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

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

如果这样做没有帮助,请提供有关您如何执行回放的更多详细信息。它来自服务吗?

+0

我编辑了一些代码,谢谢你的回复。我也检查了清单,并使用了适当的许可。 – user2727048

相关问题