可能的重复项:
在来电上停止和开始音乐
我有一个简单的应用程序,它使用 MediaPlayer 类播放一些音频。在调试我的应用程序时,我发现音频在来电和去电期间仍然播放。
我发现我的问题的解决方案是使用phoneStateListener。不过我不太明白该怎么做。我看到一些使用BroadcastReceiver和PhoneStateListener的例子,我不明白为什么我们需要一个BroadCastReceiver。
如果有人可以提供PhoneStateListener的示例实现,我将不胜感激。如果我可以获得电话状态,我可以暂停或恢复音频,因为我的 MediaPlayer 对象是整个应用程序的全局对象。
我使用的...只要调用状态发生更改,onCallStateChanged()
函数就会在所有 PhoneStateListeners 中调用,因此这就是您需要处理的内容。
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
//Makes sure the audio is paused for incoming/outgoing phone calls
public class ListenToPhoneState extends PhoneStateListener {
private boolean pausedForPhoneCall = false;
private UIManager uiManager;
ListenToPhoneState(UIManager manager){
uiManager = manager;
}
@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
resumeInAndroid();
return;
case TelephonyManager.CALL_STATE_OFFHOOK:
pauseInAndroid();
return;
case TelephonyManager.CALL_STATE_RINGING:
pauseInAndroid();
return;
}
}
private void resumeInAndroid(){
if(pausedForPhoneCall == true) {
pausedForPhoneCall=false;
uiManager.waitForPhoneCall(false);
}
}
private void pauseInAndroid(){
if(pausedForPhoneCall == false){
pausedForPhoneCall=true;
uiManager.waitForPhoneCall(true);
}
}
String stateName(int state) {
switch (state) {
case TelephonyManager.CALL_STATE_IDLE: return "Idle";
case TelephonyManager.CALL_STATE_OFFHOOK: return "Off hook";
case TelephonyManager.CALL_STATE_RINGING: return "Ringing";
}
return Integer.toString(state);
}
}
如果要将其添加到当前活动中,请执行此操作。
ListenToPhoneState listener = new ListenToPhoneState(userInterface);
TelephonyManager tManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
if(tManager != null)
tManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
难道您不想暂停当前的活动吗?如果你向你的类传递了当前活动的实例,如果你真的愿意,你可以调用 finish() 并在 switch 语句中创建一个新活动。