Android:如何在后台使用ContentResolver

时间:2012-02-12 16:45:52

标签: android android-activity android-contentresolver

我的课程扩展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中我发送新的短信。

1 个答案:

答案 0 :(得分:0)

您需要一个有效的Context对象(例如,一个活动或服务,这些是Context的子类)。这些是由android创建的,不要使用构造函数来创建这些对象!

这里解释了在BroadcastReceiver中获取所需的上下文:https://stackoverflow.com/a/6074829/1127492,它是onReceive()的第一个参数。