Android: Cómo comprobar si el número SMS entrante existe en el teléfono de contacto en BroadcastReceiver y el bloque es el número no existe

Quiero ser cuando hay sms entrantes cuyo número no está en contacto, entonces el texto en el bloque, de seguro, verificando si hay algún número no está en la guía telefónica. Tengo un número de código de verificación existen, pero el tiempo de error i código de mover en la clase BroadcastReceiver ?, y cómo llamar al método contactExists en 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; } 

Yo uso AsyncTask, pero estoy confundido sobre lo que llamar el método contactExists, y cómo puedo introducir el número en contactExists, con el fin de reconocer que el número de existentes

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

One Solution collect form web for “Android: Cómo comprobar si el número SMS entrante existe en el teléfono de contacto en BroadcastReceiver y el bloque es el número no existe”

No consulte al proveedor de contenido en el subproceso principal, ejecute un subproceso nuevo o utilice 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; } } 

Iniciar una tarea:

 new Checkcontact(context).execute("123456789"); 
  • ¿Emisión si un dispositivo bluetooth está conectando / desconectando?
  • Activar y desactivar receptor de difusión en el botón de clic
  • NEW_OUTGOING_CALL no se llama en el Samsung Galaxy S
  • Cómo usar LocalBroadcastManager?
  • ¿Cuándo se transmite la intención ACTION_DEVICE_STORAGE_LOW?
  • Cómo desbloquear la pantalla cuando se llama BroadcastReceiver?
  • El receptor de reinicio no funciona en los teléfonos xiaomi
  • ¿Es posible escribir un receptor de difusión Android que detecte cuando el teléfono se despierta?
  • Actividad ha filtrado IntentReceiver
  • La notificación deleteIntent no funciona
  • ¿Puedo seguir recibiendo la intención del receptor de difusión después de que la fuerza detuviera mi aplicación en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.