我已经构建了一个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 =?”是该查询的非法字段。
很高兴为您解决此问题提供帮助和建议:)
答案 0 :(得分:0)
直接访问数据库可能不是最好的主意。由于位置和数据结构可能会随着不同的Android版本而变化(它使用7 => 8的日历存储来实现)。不过,请检查您的设备位置和数据库结构是否相同。
对于彩信,您可以查看PduParser用于解析此文件夹中的彩信和其他课程。