Is it possible to detect rejected calls in Android?

In my application, it would be nice to intercept when the user rejects the call, i.e. decides to send a busy signal. Is there a way, besides being notified when there is an incoming call, to do this? I did not find anything in the docs about this. This information is stored in the call log, that is, I can poll the call log to see if the call was rejected or answered?

+4
source share
3 answers

Hey. You can use the PhoneStateListener and CallLog to request a list of recent calls to find rejected calls.

http://developer.android.com/reference/android/provider/CallLog.html http://developer.android.com/reference/android/telephony/PhoneStateListener.html

Alternatively, you can track the broadcasts on android.intent.action.NEW_OUTGOING_CALL and android.intent.action.NEW_INCOMING_CALL just put android.permission.PROCESS_INCOMING_CALLS and android.permission.PROCESS_OUTGOING_CALLS in your manifest.

+5
source

After a long time of searching and logic to solve this problem, I get a solution:

Problem: If I call a person, if my call is not accepted by a person, I need to show a toast on my side, my call is rejected

Solution: Create a receiver that registers with two actions

android.intent.action.NEW_OUTGOING_CALL android.intent.action.PHONE_STATE

Both actions are necessary.

To do this, you must accept this permission.

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

Manifast.xml

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

And your BroadcastReceiver class

* Call_Receiver.java *

 import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; import android.util.Log; import android.widget.Toast; /** * */ public class Call_Receiver extends BroadcastReceiver { private Context ctx; @Override public void onReceive(Context context, Intent intent) { ctx = context; OutgoingIncomingCallListener phoneListener = new OutgoingIncomingCallListener(); TelephonyManager telephony = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE); if (intent.getAction() .equals("android.intent.action.NEW_OUTGOING_CALL")) { Log.i("", " :::::::::::: inside onReceive if &&&&&& :::::::::::::"); telephony.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE); } } class OutgoingIncomingCallListener extends PhoneStateListener { public boolean wasRinging; @Override public void onCallStateChanged(int state, String incomingNumber) { switch (state) { case TelephonyManager.CALL_STATE_RINGING: Log.i("", " ************ RINGING ********"); wasRinging = true; break; case TelephonyManager.CALL_STATE_OFFHOOK: Log.i("", " *********** OFFHOOK ********"); if (!wasRinging) { // Start your new activity Log.i("", " *********** if ********"); } else { // Cancel your old activity Log.i("", " *********** else ********"); } // this should be the last piece of code before the break wasRinging = true; break; case TelephonyManager.CALL_STATE_IDLE: Log.i("", " ::::::::::: IDLE :::::::::"); // this should be the last piece of code before the break // Log.i("", " *********** OFFHOOK ********"); if (wasRinging) { Toast.makeText(ctx, "Your call is disconnected by receiver", 10000) .show(); } wasRinging = true; break; } } } } 

This will show you a toast when you call, not accepted.

+1
source

what if use android.intent.action.NEW_INCOMING_CALL ?

When you reject an incoming call, the callstate changes from idle. This means that you rejected.

If the call status changes from OFFHOOK to idle, it means that you answered the call.

0
source

Source: https://habr.com/ru/post/1332766/


All Articles