此代码有效。我遇到的唯一问题是,当我没有使用应用程序并且电话响铃时,我挂断电话后会播放音乐。
public void level_one(View view){
mp3 = MediaPlayer.create(this, R.raw.alpha_12);
PhoneStateListener phoneStateListener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
if (state == TelephonyManager.CALL_STATE_RINGING) {
mp3.pause();
} else if(state == TelephonyManager.CALL_STATE_IDLE) {
mp3.start(); // Runs this line even if I didn't play
} else if(state == TelephonyManager.CALL_STATE_OFFHOOK) {
mp3.pause();
}
super.onCallStateChanged(state, incomingNumber);
}
};
TelephonyManager mgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
if(mgr != null) {
mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
}
}
答案 0 :(得分:2)
只需引入一个布尔值即可跟踪音乐是否曾播放过。我刚刚完成了你周围的课程,但你明白了。
public class MyClass
{
private boolean isMusicPlaying = false;
public void someFunctionWhichStartsMusic()
{
//start the music
isMusicPlaying = true;
}
public void level_one(View view){
mp3 = MediaPlayer.create(this, R.raw.alpha_12);
PhoneStateListener phoneStateListener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
if (state == TelephonyManager.CALL_STATE_RINGING)
{
mp3.pause();
}
else if(state == TelephonyManager.CALL_STATE_IDLE
&& isMusicPlaying) // pay attention to this!
{
mp3.start();
}
else if(state == TelephonyManager.CALL_STATE_OFFHOOK)
{
mp3.pause();
}
super.onCallStateChanged(state, incomingNumber);
}
};
TelephonyManager mgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
if(mgr != null) {
mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
}
}
}