1

我目前正在制作一个动态壁纸,它需要跟踪未读短信的数量。收到短信后,我会像这样更新 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 初始化为正确的值,我必须使用上面的代码对其进行初始化。问题是它需要一个上下文。当我尝试将应用程序上下文传递给广播接收器的构造函数时,我得到一个“无空构造函数”异常。

4

3 回答 3

2

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

于 2013-03-28T18:46:02.633 回答
0

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

从您的问题来看,您需要在 BroadcastReceiver 的构造函数上添加一个上下文。

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

然后在启动程序时调用这个 IntentService 来显示未读计数,并且在 BroadcastReceiver 上你只调用 IntentService。

于 2013-04-01T11:54:50.853 回答
0

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

于 2013-04-01T12:08:37.350 回答