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"); 
  • ¿Qué problemas de seguridad puede causar SendBroadcast y qué es un enfoque mejor?
  • La aplicación de Android A quiere realizar el seguimiento de los datos de referencia de Google Play para la instalación de la aplicación Android B
  • No se puede detectar cuando se responde la llamada saliente en Android
  • LocalBroadcastManager vs Context.registerReceiver (), Context.sendBroadcast (Intent) y Context.unregisterReceiver () son iguales?
  • BroadcastReceiver: no se puede instanciar clase; Sin constructor vacío
  • ACTION_MY_PACKAGE_REPLACED no recibido
  • Más de un BroadcastReceiver para la misma intención con doc contradictorio y práctica
  • Receptor de alarma y el manifiesto de Android
  • Android: receptor de la difusión para la pantalla encendido y pantalla apagado
  • Android BroadcastReceiver onReceive () llamado dos veces en android 4.0
  • Excepción extraña de "Receptor no registrado"
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.