我开发了一个 radio 应用程序,我需要在来电/去电时暂停 radio 。我使用了 PhoneStateListener,它在所有 android 版本中都运行良好,但在 lollipop 中除外。这是我用来处理电话的代码。我已经尝试了 setStreamVolume 和 setStreamMute 方法,但两者似乎都不适用于 Lollipop 。请一些人帮助我。
提前致谢。
PhoneStateListener phoneStateListener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state,
String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_RINGING: // Incoming
// call:
// Pause
// music
if (Globals.isPlayerRunning) {
curVolume = audioManager
.getStreamVolume(AudioManager.STREAM_MUSIC);
audioManager.setStreamVolume(
AudioManager.STREAM_MUSIC, 0, 0);
audioManager.setStreamMute(
AudioManager.STREAM_MUSIC, true);
isServiceMuteByCall = true;
}
break;
case TelephonyManager.CALL_STATE_IDLE: // Not in
// call:
// Play
// music
if (isServiceMuteByCall) {
isServiceMuteByCall = false;
audioManager.setStreamMute(
AudioManager.STREAM_MUSIC, false);
audioManager.setStreamVolume(
AudioManager.STREAM_MUSIC, curVolume,
AudioManager.FLAG_PLAY_SOUND);
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK:// A call
// is
// dialing,
// active
// or
// on
// hold
if (Globals.isPlayerRunning) {
curVolume = audioManager
.getStreamVolume(AudioManager.STREAM_MUSIC);
audioManager.setStreamMute(
AudioManager.STREAM_MUSIC, true);
audioManager.setStreamVolume(
AudioManager.STREAM_MUSIC, 0, 0);
isServiceMuteByCall = true;
}
break;
}
super.onCallStateChanged(state, incomingNumber);
}
};
if (mgr != null) {
mgr.listen(phoneStateListener,
PhoneStateListener.LISTEN_CALL_STATE);
}
最佳答案
这是上述问题的解决方案。这可以使用 BroadcastReceiver 来解决。
创建一个扩展 BroadcastReceiver 的类,并在 onreceive 方法内部检查电话状态,如下所示。
public class TelephonyManagerReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (TelephonyManager.ACTION_PHONE_STATE_CHANGED.equals(intent.getAction())) {
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
if (TelephonyManager.EXTRA_STATE_RINGING.equals(state)) {
//stop the player or mute the audio here
} else if (TelephonyManager.EXTRA_STATE_IDLE.equals(state)) {
//start the player or unmute the audio here
} else if (TelephonyManager.EXTRA_STATE_OFFHOOK.equals(state)) {
//stop the player or mute the audio here
}
}
}
}
在此之后,在 list 文件中添加广播接收器。
<receiver android:name="com.radioapp.util.TelephonyManagerReceiver" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
并确保您在 list 中请求此权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
关于android - PhoneStateListener 在安卓 Lollipop 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28279093/