androidtelephonycallblocking

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.


Solution

  • 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" />