android AppWidget: SMS查询在模拟器上工作,但不能在真实设备上工作



我已经建立了一个appWidget更新它的未读短信计数为特定的联系人当一个新的短信进来,为此我已经注册了一个contentserver来监控传入的短信。

mySMSObserver类调用下面的方法,通过ID获取特定联系人的未读消息数。

到目前为止都很好,问题是下面的查询在模拟器上工作得很好,但是当我在android设备上尝试时,它总是返回0未读消息(如Toast所示)。

private static String updateUnreadSMS(String contactID, Context Context) {

ContentResolver cr=context.getContentResolver();
//final Uri SMS_INBOX=(Uri.parse("content://mms-sms/conversations"));
//final Uri SMS_INBOX=(Uri.parse("content://mms/inbox"));
final Uri SMS_INBOX=Uri.parse("content://sms/inbox");
Cursor c = cr.query(SMS_INBOX, null, "read = 0 AND person=?", new String[]{contactID}, null);
// get number of unread sms messages
int unreadMessagesCount = c.getCount();
Log.d("DEBUG", "UnreadSMS: "+unreadMessagesCount);
Toast.makeText(context, "updateUnreadSMS "+unreadMessagesCount, Toast.LENGTH_LONG).show();
c.deactivate();
return String.valueOf(unreadMessagesCount); 

}

不同的设备需要不同的查询吗?

我如何为"content://mms/inbox"编写相同的查询?

将很高兴您的帮助和建议解决这个问题:)

直接访问数据库可能不是最好的主意。由于位置和数据结构可能会随着不同的Android版本而改变(从7 => 8开始的日历存储就是这样),但是检查你的设备位置和数据库结构是否相同。

对于彩信,您可以查看用于解析彩信消息和此文件夹中的其他类的PduParser。

相关内容

最新更新