Android: Incoming call auto answer, play a audio file

Md Maidul Islam picture Md Maidul Islam · Oct 17, 2012 · Viewed 29.5k times · Source

In Android, at the time of an incoming call, I want to receive it. Then, from my app, automatically play an audio file during a call and the other party should hear it. Is this possible?

Answer

Sahil Mahajan Mj picture Sahil Mahajan Mj · Oct 17, 2012

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.