Java Android:如何检查BroadcastReceiver中的联系人电话中是否存在传入的SMS号码,以及阻止是否不存在该号码

Java Android:如何检查BroadcastReceiver中的联系人电话中是否存在传入的SMS号码,以及阻止是否不存在该号码,java,android,broadcastreceiver,Java,Android,Broadcastreceiver,我想知道当收到的短信息中没有联系的号码时,该区块中的文本,通过检查电话簿中是否没有任何号码来确定。 我有一个代码检查号码存在,但错误时间我代码在类BroadcastReceiver?中移动,如何在onReceive中调用方法contactExists public boolean contactExists(Context context, String number, ContentResolver contentResolver) { Cursor phones =

我想知道当收到的短信息中没有联系的号码时,该区块中的文本,通过检查电话簿中是否没有任何号码来确定。 我有一个代码检查号码存在,但错误时间我代码在类BroadcastReceiver?中移动,如何在onReceive中调用方法contactExists

 public boolean contactExists(Context context, String number, ContentResolver contentResolver) {
            Cursor phones = contentResolver.query(ContactsContract.CommonDataKinds.Phone.
                    CONTENT_URI, null, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
            while (phones.moveToNext()){
                String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                if(PhoneNumberUtils.compare(number, phoneNumber)){
                    return true;
                }
            }
            return false;
        }
我使用AsyncTask,但我不知道该如何调用contactExists方法,以及如何在contactExists中输入号码,以便识别现有的

public class SmsReceiver extends BroadcastReceiver {

    public static int MSG_TPE = 0;
    private String number;

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

        String action = intent.getAction();
        if (action.equals(AppConstants.SMS_RECEIVED_ACTION)) {
            Bundle bundle = intent.getExtras();
            SmsMessage[] msgs = null;
            String message = "";
            String date = AppUtils.getDate();
            String time = AppUtils.getTime();
            String status = AppUtils.getStatus();
            if (bundle != null) {
                Object[] pdus = (Object[]) bundle.get("pdus");
                msgs = new SmsMessage[pdus.length];
                for (int i = 0; i < msgs.length; i++) {
                    msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
                    number = msgs[i].getOriginatingAddress();
                    message += msgs[i].getMessageBody().toString();
                    message += "\n";
                }
                if (SettingsPreferences.isBlockAllSms(context)) {
                    this.abortBroadcast();

                    CallMessageItem item = new CallMessageItem();
                    item.setDate(date);
                    item.setMessage(message);
                    item.setNumber(number);
                    item.setTime(time);
                    item.setStatus(status);
                    item.setType(AppConstants.TYPE_MESSAGE);
                    CMBDataProvider.addCallMessage(context, item);

                    if (SettingsPreferences.isNotificationShow(context)) {
                        AppUtils.generateNotification(
                                context,
                                context.getResources().getString(
                                        R.string.block_sms_message), false);

                    }


                } else if (SettingsPreferences.isBlockPrivateSms(context)) {
                    ArrayList<BlockItem> block_number = CMBDataProvider
                            .getBlackList(context);
                    if (!TextUtils.isEmpty(message)
                            && !TextUtils.isEmpty(number)
                            && block_number != null && block_number.size() > 0) {
                        message = message.trim();
                        for (int i = 0; i < block_number.size(); i++) {
                            if (number
                                    .contains(block_number.get(i).getNumber())) {
                                this.abortBroadcast();
                                CallMessageItem item = new CallMessageItem();
                                item.setDate(date);
                                item.setMessage(message);
                                item.setNumber(number);
                                item.setTime(time);
                                item.setType(AppConstants.TYPE_MESSAGE);
                                CMBDataProvider.addCallMessage(context, item);
                                if (SettingsPreferences
                                        .isNotificationShow(context)) {
                                    AppUtils.generateNotification(
                                            context,
                                            context.getResources().getString(
                                                    R.string.block_sms_message),
                                            false);
                                }
                                break;
                            }
                        }
                    }
                }
            }
        }
    }

    private class Contactexixt extends AsyncTask<String, Integer, Double> {

        @Override
        protected Double doInBackground(String... params) {
            // TODO Auto-generated method stub
            contactExists(params[0]);
            return null;
        }

        public boolean contactExists(Context context, String number){
            Uri lookupUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));

            String[] mPhoneNumberProjection = { ContactsContract.PhoneLookup._ID, ContactsContract.PhoneLookup.NUMBER, ContactsContract.PhoneLookup.DISPLAY_NAME };

            Cursor cur = context.getContentResolver().query(lookupUri,mPhoneNumberProjection, null, null, null);

            try {
                // Add your data

            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
            } catch (IOException e) {
                // TODO Auto-generated catch block
            }
        }


    }


}
公共类SmsReceiver扩展了BroadcastReceiver{
公共静态int MSG_TPE=0;
私有字符串编号;
@凌驾
公共void onReceive(上下文、意图){
String action=intent.getAction();
if(action.equals(AppConstants.SMS_RECEIVED_action)){
Bundle=intent.getExtras();
SmsMessage[]msgs=null;
字符串消息=”;
字符串日期=AppUtils.getDate();
字符串时间=AppUtils.getTime();
字符串状态=AppUtils.getStatus();
if(bundle!=null){
Object[]pdus=(Object[])bundle.get(“pdus”);
msgs=新SMS消息[PDU.length];
对于(int i=0;i0){
message=message.trim();
对于(int i=0;i
不要在主线程中查询内容提供程序,运行新线程或使用AsyncTask

private class Checkcontact extends AsyncTask<String, Void, Boolean> {

    private Context context;

    public Checkcontact(Context context) {
        // TODO Auto-generated constructor stub
        this.context = context;
    }

    @Override
    protected Boolean doInBackground(String... strings) {
        try {
            return contactExists(context, strings[0]);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return false;
    }

    // The argument result is return by method doInBackground
    @Override
    protected void onPostExecute(Boolean result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);

        // You can handle the result here
    }

    public boolean contactExists(Context context, String number) throws Exception {
        Uri lookupUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));

        String[] mPhoneNumberProjection = { ContactsContract.PhoneLookup._ID, ContactsContract.PhoneLookup.NUMBER,
                ContactsContract.PhoneLookup.DISPLAY_NAME };

        Cursor cur = context.getContentResolver().query(lookupUri, mPhoneNumberProjection, null, null, null);
        try {
            if (cur.moveToFirst()) {
                // if contact are in contact list it will return true
                return true;
            }
        } finally {
            if (cur != null)
                cur.close();
        }
        // if contact are not match that means contact are not added
        return false;
    }
}

对不起,我无意中编辑了你的评论,我想这是我的问题,你能再次检查你的评论吗,是否正确我有错误:错误:(95,6)错误:SmsReceiver类中的构造函数Checkcontact。Checkcontact不能应用于给定的类型;必需:找到上下文:SmsReceiver原因:实际参数SmsReceiver无法通过方法调用转换转换为上下文抱歉,在BroadcastReceiver中,传递给task的参数是方法onReceive的参数“Context”。您能帮我一下吗?若您需要启动另一个活动来处理该数字,开始活动,然后开始
new Checkcontact(context).execute("123456789");