如果用户阅读短信(来自本机)不包括“阅读”,是否还会修改短信的任何其他属性?

时间:2013-10-12 15:17:35

标签: android

如果用户阅读不包括“阅读”的短信(来自本机),是否还会修改短信的任何其他属性?

例如:

int read_status = cur1.getInt(cur1.getColumnIndex("read"));
读取短信时,

read_status将变为1。

请指导我。

1 个答案:

答案 0 :(得分:2)

下面的代码将允许您通过打印SMS内容提供商返回的所有消息的列和相应值来确定“读取”以外的任何其他属性是否正在更改。基于我在运行Android 4.1.2 JZO54K的Nexus S上运行的快速测试,很遗憾,当SMS从未读状态变为读状态时,没有其他值被修改。

但是,有一个相关的“看见”属性可能会引起关注。当SMS已经呈现给用户但是可能在已经读取消息内容之前(例如,当在本机消息传递应用的摘要视图中显示时),它从0变为1。通过查看com.android.mms.data.Conversation类中的用法,可以进一步理解“看到”和“阅读”之间的关系。

也可以使用android.telephony.SmsMessage.getStatusOnIcc()方法检索读取状态,但这可能会为您提供与Content Provider中检索到的信息相同的信息。 您可能希望跟踪Google is indicating will be coming in Android 4.4 (KitKat)对SMS API的更改,因为它们可以帮助解决您尝试解决的问题,但如果它依赖于隐藏的API /内容提供商,它们也可能会破坏您现有的实施。< / p>

/* for use within a ContentObserver class; print all messages & fields
   from the SMS Content Provider when change to mmssms.db is detected;
   not optimized for production use */
   public void onChange(boolean selfChange) {
     super.onChange(selfChange);
     Uri uri = Uri.parse("content://sms/inbox");
     Cursor c= getContentResolver().query(uri,null,null,null,null);
     if(c.moveToFirst()){
       for(int i=0;i<c.getCount();i++){
         Log.d(TAG,"======= Message ID "+c.getString(c.getColumnIndexOrThrow("_id")).toString()+" ======="); 
         for (int j=0;j<c.getColumnCount();j++){
           Log.d(TAG,c.getColumnName(j)+" = "+c.getString(j));
         } 
       }
     }     
   }
 }