Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Reject a call programatically in android

In my app I will maintain a list of contacts.

Any calls from contacts in the list will be dropped. They will show under missed calls but the phone will not ring.

like image 767
harish Avatar asked Sep 08 '11 12:09

harish


People also ask

How do I automatically decline a phone call?

In order to use auto reject, do the following: Tap Menu | Settings | Call Settings. In the new window, tap All calls. Tap Auto Reject.

How do you dismiss a call on android?

Answer or reject a phone call To answer the call, swipe the white circle to the top of the screen when your phone is locked, or tap Answer. To reject the call, swipe the white circle to the bottom of the screen when your phone is locked, or tap Dismiss.


2 Answers

First create this Interface:

  public interface ITelephony {

        boolean endCall();

        void answerRingingCall();

        void silenceRinger();

  }

Then Create this class that extends BroadcastReceiver

public class IncomingCallReceiver extends BroadcastReceiver {
    private ITelephony telephonyService;
    private String blacklistednumber = "+458664455";

    @Override
    public void onReceive(Context context, Intent intent) {

       TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
       try {
         Class c = Class.forName(tm.getClass().getName());
         Method m = c.getDeclaredMethod("getITelephony");
         m.setAccessible(true);
         ITelephony telephonyService = (ITelephony) m.invoke(tm);
         Bundle bundle = intent.getExtras();
         String phoneNumber = bundle.getString("incoming_number");
         Log.e("INCOMING", phoneNumber);
         if ((phoneNumber != null) && phoneNumber.equals(blacklistednumber)) { 
            telephonyService.silenceRinger();
            telephonyService.endCall();
            Log.e("HANG UP", phoneNumber);
         }

       } catch (Exception e) {
         e.printStackTrace();
       }
}

This will only block that single phonenumber, but you get the point.

In your manifest add this:

<receiver android:name=".IncomingCallReceiver">
    <intent-filter android:priority="999">
        <action android:name="android.intent.action.PHONE_STATE" />
    </intent-filter>
</receiver>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.PROCESS_INCOMING_CALLS" />
like image 175
Finn Larsen Avatar answered Sep 21 '22 16:09

Finn Larsen


Download the class of ITelephony from here.

Then put it in a package (make a new package) of com.android.internal.telephony. Then import the package to the appropriate class and for rejecting a call use the endCall() method

like image 26
user3451725 Avatar answered Sep 21 '22 16:09

user3451725