Java Android:如何检查BroadcastReceiver中的联系人电话中是否存在传入的SMS号码,以及阻止是否不存在该号码
我想知道当收到的短信息中没有联系的号码时,该区块中的文本,通过检查电话簿中是否没有任何号码来确定。 我有一个代码检查号码存在,但错误时间我代码在类BroadcastReceiver?中移动,如何在onReceive中调用方法contactExistsJava Android:如何检查BroadcastReceiver中的联系人电话中是否存在传入的SMS号码,以及阻止是否不存在该号码,java,android,broadcastreceiver,Java,Android,Broadcastreceiver,我想知道当收到的短信息中没有联系的号码时,该区块中的文本,通过检查电话簿中是否没有任何号码来确定。 我有一个代码检查号码存在,但错误时间我代码在类BroadcastReceiver?中移动,如何在onReceive中调用方法contactExists public boolean contactExists(Context context, String number, ContentResolver contentResolver) { Cursor phones =
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
}
}
}
}
公共类SmsReceiver扩展了BroadcastReceiver{
公共静态int MSG_TPE=0;
私有字符串编号;
@凌驾
公共void onReceive(上下文、意图){
String action=intent.getAction();
if(action.equals(AppConstants.SMS_RECEIVED_action)){
Bundle=intent.getExtras();
SmsMessage[]msgs=null;
字符串消息=”;
字符串日期=AppUtils.getDate();
字符串时间=AppUtils.getTime();
字符串状态=AppUtils.getStatus();
if(bundle!=null){
Object[]pdus=(Object[])bundle.get(“pdus”);
msgs=新SMS消息[PDU.length];
对于(int i=0;i0){
message=message.trim();
对于(int i=0;i
不要在主线程中查询内容提供程序,运行新线程或使用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;
}
}
对不起,我无意中编辑了你的评论,我想这是我的问题,你能再次检查你的评论吗,是否正确我有错误:错误:(95,6)错误:SmsReceiver类中的构造函数Checkcontact。Checkcontact不能应用于给定的类型;必需:找到上下文:SmsReceiver原因:实际参数SmsReceiver无法通过方法调用转换转换为上下文抱歉,在BroadcastReceiver中,传递给task的参数是方法onReceive的参数“Context”。您能帮我一下吗?若您需要启动另一个活动来处理该数字,开始活动,然后开始
new Checkcontact(context).execute("123456789");