在我的一个应用程序中,我必须检测外部声音,即使应用程序在后台。我有一个问题。
即使app处于后台模式或关闭,是否可以连续检测外部声音?如果是这样,它会影响设备电池吗?
如果不可能,那么有没有其他方法可以实现这个目标?
请告诉我这件事。
谢谢,
答案 0 :(得分:1)
我目前正在做类似这样的事情,我使用了一个扩展服务http://developer.android.com/guide/components/services.html的类。
如上所述,如果它连续运行,你可能会得到android ANR kill wait选项。我有两种解决方法。
确保您的服务没有在主ui线程上运行,使用Async或只是自己进行线程化。除此之外,尽量避免使用ANR。
我限制了每项服务的持续时间。即,服务侦听几秒钟,运行分析,保存它,如果满足条件,则在调用stopSelf()之前创建一个新服务。这可能有点hacky,但它也可以工作取决于你实际使用音频。
答案 1 :(得分:0)
这是我用来查看audiofocus是否与服务中的MediaPlayer一起更改的片段。你不会知道正在播放什么,但你会知道外部的东西是否正在请求音频:
OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() {
public void onAudioFocusChange(int focusChange) {
//Manage audiofocus changes
if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT
&& mp != null) {
if (mp.isPlaying())
pausePlaying();
} else if (focusChange == AudioManager.AUDIOFOCUS_GAIN
&& mp != null) {
if (!mp.isPlaying())
pausePlaying();
} else if (focusChange == AudioManager.AUDIOFOCUS_LOSS
&& mp != null) {
am.abandonAudioFocus(afChangeListener);
if (mp.isPlaying())
pausePlaying();
Log.d("FOCUS", "Focus Changed AUDIOLOSS ");
}
}
};