我的课程扩展BroadcastReceiver
并获得所有新短信。
当我收到新的短信时,我想搜索电话簿,检查此消息中的电话号码是否在电话簿中,如果是,则将短信发送到另一部电话。
我使用ContentResolver
检查电话号码,但要使用它我需要在Activity中使用它或指向活动,但我的短信听众在后台工作。
有没有办法在没有活动的情况下搜索电话簿,或者从收到新短信时获得的上下文或意图中获取有效的活动?
我尝试使用类似的东西:
Activity act = new Activity();
DBManager dbm = new DBManager(act);
ArrayList<MyContact> res = dbm.phoneSearch(sms_ar[1]);
SmsSender sms = new SmsSender(act);
if(res.size() > 0){
String answer = res.get(0).getName()+CSStatic.SMS_SEPARATOR+res.get(0).getPhone();
for(int z = 1; z < res.size(); z++){
answer = answer+CSStatic.SMS_SEPARATOR+res.get(z).getName()+CSStatic.SMS_SEPARATOR+res.get(z).getPhone();
}
Log.d("sms", "Answer: "+answer);
sms.smsAnswer(answer, sms_ar[2]);
} else {
String phone = dbm.getPhoneToQuery(sms_txt);
sms.smsQueryNext(sms_txt, phone);
}
act.finish();
但它不起作用:P 在DBManager中我搜索手机,在SmsSender中我发送新的短信。
答案 0 :(得分:0)
您需要一个有效的Context对象(例如,一个活动或服务,这些是Context的子类)。这些是由android创建的,不要使用构造函数来创建这些对象!
这里解释了在BroadcastReceiver中获取所需的上下文:https://stackoverflow.com/a/6074829/1127492,它是onReceive()的第一个参数。