Android: Incoming call auto answer, play a audio file

让人想犯罪 __ 提交于 2019-12-02 17:12:56

What you are talking about is not exactly possible with android. Android has no access to the in-call audio stream.

Though i can give you a little bit idea about how to do it.

first to intercept incoming call, you need to register a broadcast receiver, which is invoked whenever call is received

public void onReceive(final Context context, Intent intent) 
{
    TelephonyManager telephonyManager = null;
    PhoneStateListener listener = new PhoneStateListener() 
    {
        public void onCallStateChanged(int state, String incomingNumber) 
        {
            switch (state) 
            {
            case TelephonyManager.CALL_STATE_IDLE:
                Toast.makeText(context, "Call Ended..", Toast.LENGTH_LONG).show();
                Log.i("stop", "Call Ended....");
                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                Toast.makeText(context, "Call Picked..", Toast.LENGTH_LONG) .show();
                Log.i("received", "Call Picked....");
                break;
            case TelephonyManager.CALL_STATE_RINGING:
                Toast.makeText(context, "Call Ringing.." + incomingNumber,5000).show();
                break;
            }
        }
    };
    // Register the listener with the telephony manager
    telephonyManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);

Also change your manifest,

<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <receiver android:name="MyReceiver">

            <intent-filter>

                <action android:name="android.intent.action.NEW_OUTGOING_CALL" />



            </intent-filter>
        </receiver>
    </application>

With this, you can intercept the incoming call and pick the call, now you can try playing some mp3 file in the

case TelephonyManager.CALL_STATE_OFFHOOK:
                // Play mp3 file here
                break;

Hope it helps. Must try this and tell me the experience.

You cannot play anything to the caller directly. If you want you'd play via loudspeaker, but that's not really what you want. So "no", you cannot do that.

Try using telephonymanager, it contains the events you are looking for:

  1. http://developer.android.com/reference/android/telephony/TelephonyManager.html#ACTION_PHONE_STATE_CHANGED

In android there is no option to play against a live call or switch audio source to something other then default Mic! here are details that why you can't play recordings during a live call

However there are some tricks,

  1. You can play desired recording from mobile speaker, during a call ! an Mic will pick it from there?
  2. Or you can interconnect a handfree Speaker wires to its Mic wire
  3. Or use bluetooh from some other device to play desired recording
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!