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?
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,
- You can play desired recording from mobile speaker, during a call ! an Mic will pick it from there?
- Or you can interconnect a handfree Speaker wires to its Mic wire
- Or use bluetooh from some other device to play desired recording
来源:https://stackoverflow.com/questions/12929489/android-incoming-call-auto-answer-play-a-audio-file