How to Reject a call programatically in android

后端 未结 2 1148
悲哀的现实
悲哀的现实 2020-12-02 19:49

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.

相关标签:
2条回答
  • 2020-12-02 19:59

    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

    0 讨论(0)
  • 2020-12-02 20:17

    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" />
    
    0 讨论(0)
提交回复
热议问题