代码之家  ›  专栏  ›  技术社区  ›  rony l

如何在android中获取特定日期之间发送的短信数量

  •  0
  • rony l  · 技术社区  · 14 年前

    在android中,有没有一种方法可以检索在特定日期之间发送的sms消息的数量?

    我更喜欢官方支持的sdk功能,在您的回答中说明这是否是官方sdk的一部分会有帮助。

    我知道 this 堆栈溢出问题,但似乎使用了不受官方支持的 android.provider.Telephony.SMS_RECEIVED content://sms/sent ,所以我宁愿不使用它(如果我错了,请纠正我,这是不受支持的)。

    1 回复  |  直到 7 年前
        1
  •  7
  •   Nikola Despotoski    9 年前

    我知道这是一个很古老的问题,我只是偶然发现了一个没有答案的问题。所以请不要因为这个就轻视我。也许有人需要这个答案。

    你所要做的就是查询电话内容提供商(我用过 CallLog.Calls 用常量代替列名的硬编码字符串)

     String[] projection = { CallLog.Calls.DATE };
     Uri smsContentUri = Uri.parse("content://sms/");
     Cursor cursor = this.getContentResolver().query(smsContentUri , selection,where, null, null);
     SimpleDateFormat format = new SimpleDateFormat("dd-MM-yy");
     cursor.moveToFirst();
      Log.d("SMS COUNT", ""+cursor.getCount()); 
      while(cursor.isAfterLast() == false){
            Log.d("SMS DATE", ""+cursor.getString(cursor.getColumnIndex(CallLog.Calls.DATE))); //raw format of the date in milliseconds
            long callDate = cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE));      
            String dateString = format.format(new Date(callDate));
            Log.i("SMS DATE",dateString);
            cursor.moveToNext();
     }
    

    对于您的情况,您所要做的就是提供一个where子句,它将在投影上进行选择。您需要转换前面提到的日期的界限(以毫秒为单位)(获取日期并将其转换为毫秒)。确保你的模式与 "dd-MM-yy" .

    where子句应该如下所示:

    String where = CallLog.Calls.DATE+"<"+FRIST_BOUND_IN_MS + " AND "+ CallLog.Calls.DATE + "< " + SECOND_BOUND_IN_MS;
    

    带我们进入最后一个问题: SELECT date FROM sms_content WHERE date < 'firstbound' AND date < 'second bound'

    修改 Uri smsContentUri = Uri.parse("content://sms/"); 添加到 "content://sms/" 要获取的已发送或收件箱 "content://sms/sent" "content://sms/inbox" ,关于要查询的框。 干杯。