当屏幕超时或用户按下电源按钮关闭屏幕时,我希望声音在我的应用中播放。
@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 :(得分: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