私は現在、未読の SMS の数を追跡する必要があるライブ壁紙に取り組んでいます。SMS を受信したら、次のように 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 を正しい値に初期化するには、上記のコードで初期化する必要があります。問題は、コンテキストが必要なことです。アプリケーション コンテキストをブロードキャスト レシーバーのコンストラクターに渡そうとすると、「空のコンストラクターがありません」という例外が発生します。