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

4

2 回答 2

0

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

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

如果这没有帮助,请提供有关您执行播放的具体方式的更多详细信息。它来自服务吗?

于 2013-10-01T01:22:56.680 回答
0

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

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

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

于 2013-10-12T05:36:29.467 回答