gpt4 book ai didi

java - 安卓 : How to Check if incoming SMS number exist in contact phone in BroadcastReceiver and block is number not exist

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:13:12 24 4
gpt4 key购买 nike

我想当有号码未联系的传入短信时,然后 block 中的文本,通过检查是否有任何号码不在电话簿中来确定。我有一个代码检查号码存在,但是我在 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
}
}


}


}

最佳答案

不要在主线程中查询内容提供者,运行新线程或使用 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");

关于java - 安卓 : How to Check if incoming SMS number exist in contact phone in BroadcastReceiver and block is number not exist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31869595/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com