Ram*_*esh 5 android phone-state-listener android-5.0-lollipop
我开发了一个收音机应用程序,我需要在拨入/拨出电话时暂停收音机.我已经使用了PhoneStateListener,除了在棒棒糖之外,它在所有Android版本中都运行良好.这是我用来处理电话的代码.我已经尝试了setStreamVolume和setStreamMute方法,但两者似乎都不适用于棒棒糖.请一些人帮我这个.
提前致谢.
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);
}
Run Code Online (Sandbox Code Playgroud)
这是上述问题的解决方案。可以使用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
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
之后在清单文件中添加上述广播接收器。
<receiver android:name="com.radioapp.util.TelephonyManagerReceiver" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
并确保您在清单中请求此权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1442 次 |
| 最近记录: |