2011-10-16 138 views
1

我已经构建了一个appWidget,它在更新短信时会更新它的未读短信计数,因为我注册了一个contentObserver来监控传入短信。android AppWidget:SMS查询适用于模拟器,但不适用于真实设备

mySMSObserver类调用下面的方法获取特定联系人的未读邮件数,其编号为

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

私人静态字符串updateUnreadSMS(字符串的ContactID,上下文的背景下){

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 =?”是该查询的非法字段。

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

回答

0

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

对于彩信,您可能需要查看PduParser用于分析此文件夹中的MMS消息和其他类。

+0

感谢您的评论,我只是需要一些更多的说明请: *我如何检查我的android设备位置和数据库结构是否一样?特别是,我如何检查我的android设备位置和数据库结构? *我如何间接访问我的数据库?特别是对于SMS数据库 感谢先进! – GalDude33

+0

据我所知(纠正我,如果我错了),你不能检查存储的位置。你需要知道哪个版本的Android存储数据在哪里。所以最好的方法是通过Android类来访问数据。这里是最大的问题。有些存储可以通过这种方式访问​​,有些则不行。这是Android OS不能提供所有必需的访问权限的一大缺点。我对SMS存储不熟悉,所以你需要在操作系统内部进行一次跳跃以找出在哪里和什么。 – Drejc

+0

如果你看看这个问题的评论,你会得到的感觉:http://stackoverflow.com/questions/4809874/how-to-access-the-sms-storage-on-android – Drejc

相关问题