阻止android中的特定号码(呼叫和短信)

阻止android中的特定号码(呼叫和短信),android,broadcastreceiver,call,block,blocking,Android,Broadcastreceiver,Call,Block,Blocking,我正在创建一个应用程序,用户可以在其中选择任何要阻止的数字 我认为正确的算法是:当电话铃响时,一个函数检查电话号码是否在列表中(检查数据库),如果有,拒绝那个电话 我在互联网上找到了这段代码,但它不起作用,我应该在我的活动中调用onReceive函数吗?我应该在主要活动上写些什么 代码如下: public class IncomingCallReceiver extends BroadcastReceiver { private ITelephony telephonyService;

我正在创建一个应用程序,用户可以在其中选择任何要阻止的数字 我认为正确的算法是:当电话铃响时,一个函数检查电话号码是否在列表中(检查数据库),如果有,拒绝那个电话

我在互联网上找到了这段代码,但它不起作用,我应该在我的活动中调用onReceive函数吗?我应该在主要活动上写些什么

代码如下:

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();
       }
}
接口:

 public interface ITelephony {

        boolean endCall();

        void answerRingingCall();

        void silenceRinger();

  }
我还将下面的代码添加到清单中

<receiver android:name="IncomingCallReceiver" >
        </receiver>
 <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.CALL_PHONE"/>
   <uses-permissionandroid:name="android.permission.PROCESS_INCOMING_CALLS"/>


我错过什么了吗

这是一个广播接收器,当有呼叫时,它将被呼叫。在您的活动中,您需要注册此接收器。要了解更多信息,请查看此tanx,我将界面更改为文件“ITelephony.aidl”及其工作状态!