如何在保持构造函数为空的同时将应用程序上下文传递到广播接收器中

时间:2013-03-28 18:42:13

标签: android constructor broadcastreceiver android-context

我目前正在制作动态壁纸,需要跟踪未读短信的数量。 收到短信后,我会像这样更新SMSCount:

@Override
public void onReceive(Context context, Intent intent) {
    final Uri SMS_INBOX = Uri.parse("content://sms/inbox");

    Cursor c = context.getContentResolver().query(SMS_INBOX,
                                                  null,
                                                  "read = 0",
                                                  null,
                                                  null);
    mSMSCount = c.getCount();
    c.close();
}

哪个工作正常。但是,只有在收到消息时才会更新该值,因此它会提供不正确的值(SMSCounts初始化值)。因此,要将SMSCount初始化为正确的值,我必须使用上面的代码初始化它。问题是它需要一个上下文。当我尝试将应用程序上下文传递给Broadcast接收器的构造函数时,我得到一个“无空构造函数”异常。

3 个答案:

答案 0 :(得分:2)

继续向你的类中添加一个空构造函数以及当前传递上下文的构造函数,换句话说,添加一个不带参数的构造函数。

答案 1 :(得分:0)

好的,首先,BroadcastReceiver旨在接收通知并提醒某人,而不是继续运行,所以如果你有外面的代码,请接收你的错误。

从您的问题中,您需要在BroadcastReceiver的构造函数上执行更多操作。

我的兴趣是将所有这些代码从onReceive移动到IntentService,这个服务将启动,对数据库进行查找并调用更新计数,没有实例变量,因为服务将在之后结束。

然后在启动程序时,调用此IntentService以显示未读计数,并在BroadcastReceiver上调用IntentService。

答案 2 :(得分:0)

您可以添加参数化构造函数以及默认构造函数。