简体   繁体   English

来电处理

[英]Incoming phone call handling

This is familiar problem. 这是熟悉的问题。 I am writing a media player application. 我正在编写一个媒体播放器应用程序。 I want to pause my media player when there is a incoming call. 我想在有来电时暂停媒体播放器。 How can i do that. 我怎样才能做到这一点。 Already done with my SMS handling with following code. 我的短信处理已通过以下代码完成。

IntentFilter intentFilter= new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
        SMSReceiver sMSReceiver= new SMSReceiver();
        registerReceiver(sMSReceiver, intentFilter);

So is there any simple way to handle incoming calls also 有没有简单的方法来处理来电

Use TelephonyManager.EXTRA_STATE_RINGING and TelephonyManager.EXTRA_STATE_IDLE . 使用TelephonyManager.EXTRA_STATE_RINGINGTelephonyManager.EXTRA_STATE_IDLE Check the intent for: 检查意图:

intent.getStringExtra(TelephonyManager.EXTRA_STATE)

which should equal one of these. 应该等于其中之一。

In your manifest: 在您的清单中:

<receiver android:name=".CallReciever">
    <intent-filter>
        <action android:name="android.intent.action.PHONE_STATE" />
    </intent-filter>
</receiver>

Just write one Broadcast receiver and declared it in manifest 只需编写一个广播接收器并在清单中声明它

   <receiver
        android:name="com.sample.myapp.ReceiveIncomingCall"
        android:enabled="true"
        android:exported="true"
        android:permission="android.permission.READ_PHONE_STATE" >
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE" />
        </intent-filter>
    </receiver>

write a Receiver like this... 像这样写一个接收器...

public class ReceiveIncomingCall extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
        if(state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
            // call is coming...
        }
    }
}

and add 并添加

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

in your manifest 在你的清单上

You should properly handle audio focus. 您应该正确处理音频焦点。 There is a good guide on Android Developers: http://developer.android.com/training/managing-audio/audio-focus.html Android开发人员有一个很好的指南: http : //developer.android.com/training/managing-audio/audio-focus.html

OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() {
public void onAudioFocusChange(int focusChange) {
    if (focusChange == AUDIOFOCUS_LOSS_TRANSIENT
        // Pause playback
    } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
        // Resume playback 
    } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
        am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);
        am.abandonAudioFocus(afChangeListener);
        // Stop playback
    }
};

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM