android AppWidget:SMS查询适用于模拟器,但不适用于真实设备

时间:2011-10-16 17:08:36

标签: java android sql sms android-appwidget

我已经构建了一个appWidget,当新的sms进入时,它会更新它的特定联系人的未读短信数量,因为我已经注册了一个contentObserver来监控传入的短信。

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”编写相同的查询?,因为“person =?”是该查询的非法字段。

很高兴为您解决此问题提供帮助和建议:)

1 个答案:

答案 0 :(得分:0)

直接访问数据库可能不是最好的主意。由于位置和数据结构可能会随着不同的Android版本而变化(它使用7 => 8的日历存储来实现)。不过,请检查您的设备位置和数据库结构是否相同。

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