Android: Как проверить, существует ли входящий номер SMS в контактном телефоне в BroadcastReceiver, а номер блока не существует

Я хочу быть, когда есть входящие sms, номер которых не находится в контакте, тогда текст в блоке, конечно, проверяя, есть ли какой-либо номер, нет в телефонной книге. У меня есть номер проверки кода, но ошибка времени i код перемещается в классе BroadcastReceiver ?, и как вызвать метод contactExists в onReceive?

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 } } } } 

Не запрашивайте контент-провайдера в основном потоке, запускайте новый поток или используйте 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; } } 

Запустите задачу:

 new Checkcontact(context).execute("123456789"); 
Intereting Posts
Почему мы указываем пространство имен в файле android xml? Полимер с Боуэром вызвал неудачу в Кордове Как получить текущий контекст? Кинжал – android.app.IntentService с @Inject Android RxJava, без блокировки? Совместимость GridLayout – ClassNotFoundException: не найден класс "android.support.v7.widget.GridLayout" Приложение для Android с голосовыми указаниями GPS Как я могу заставить Robospice рассматривать что-либо, кроме ответа 200 от Retrofit & OKHttp, как ошибку Создание Firefox os для Nexus 7 (grouper) получает сообщения об ошибках с помощью Ubuntu 13.10 Тест эспрессо завершился неудачно после успешного нажатия и блокировки в течение 60 секунд AdMob получает деньги на paypal / bank / check Изображение на холсте в файл JPEG Как использовать OpenCV для обработки изображения, чтобы текст стал четким и четким? «Список подключенных устройств» пуст на Ubuntu 12.04 Eclipse – Не удается завершить установку, потому что не удалось найти один или несколько обязательных элементов (org.apache.httpcomponents.httpclient)