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 =?”是该查询的非法字段。
会很高兴您的帮助和建议解决这个问题的:)
感谢您的评论,我只是需要一些更多的说明请: *我如何检查我的android设备位置和数据库结构是否一样?特别是,我如何检查我的android设备位置和数据库结构? *我如何间接访问我的数据库?特别是对于SMS数据库 感谢先进! – GalDude33
据我所知(纠正我,如果我错了),你不能检查存储的位置。你需要知道哪个版本的Android存储数据在哪里。所以最好的方法是通过Android类来访问数据。这里是最大的问题。有些存储可以通过这种方式访问,有些则不行。这是Android OS不能提供所有必需的访问权限的一大缺点。我对SMS存储不熟悉,所以你需要在操作系统内部进行一次跳跃以找出在哪里和什么。 – Drejc
如果你看看这个问题的评论,你会得到的感觉:http://stackoverflow.com/questions/4809874/how-to-access-the-sms-storage-on-android – Drejc