I want to be when there is incoming sms whose number is not in contact, then the text in the block, for sure by checking whether there are any number is not in the phone book. i am have a code check number exist, but error time i code move in class BroadcastReceiver?, and how to call method contactExists in 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;
}
I use AsyncTask, but I am confused about what to call the method contactExists, and how do I enter the number into contactExists, in order to recognize that the number of existing
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
}
}
}
}
Do not query content provider in main thread, run a new thread or use 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;
}
}
Start a task:
new Checkcontact(context).execute("123456789");
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With