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?
Samsung phones: Touch Phone and then the three-dot icon in the upper right corner, go to Settings > Answer and end calls > Auto-Answer, and disable the feature. Xiaomi phones: Go to Settings > App settings > System app settings > Phone and disable Auto-Answer.
What Does Auto-Answer Mean? Auto-answer is a feature that enables fax machines and modems to give priority to an incoming call. Voice calls are transferred to voice mail or answering machine, so that fax machines and fax modems can automatically answer and receive faxed documents.
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:
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,
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With