2016-08-04 22 views
0

我想知道如何读取特定的手机号码收到某个特定日期过去五年短信接收的最后5 SMS。阅读从一个特定的号码在特定日期

我知道如何阅读特定发件人的所有短信,以及如何阅读最后一条短信,但我无法读取和阅读最近几个短信。我尝试用

"date DESC LIMIT 5" 

我的代码读取它们就像是时间低于

Uri mSmsinboxQueryUri = Uri.parse("content://sms/inbox"); 
String[] projection = {"address", "body"}; 
Cursor cursor1 = MainActivity.this.getContentResolver().query(mSmsinboxQueryUri, 
                   null, 
                   "address = ?", 
                   new String[]{phoneNumber}, 
                   "date DESC LIMIT 5"); 

if (cursor1 != null && cursor1.moveToFirst()) { 
    body = cursor1.getString(cursor1.getColumnIndex("body")); 
    totalBody = totalBody + body; 
    Log.d("Registration", totalBody); 
} 

但每次它显示只有最后一条消息。

回答

0

您只看到一封邮件,因为您的代码只处理返回的Cursor中的第一条记录。您需要遍历Cursor来处理其余的问题。例如:

if (cursor != null && cursor.moveToFirst()) { 
    do { 
     body = cursor1.getString(cursor1.getColumnIndex("body")); 
     totalBody = totalBody + body; 
     Log.d("Registration", totalBody); 
    } while (cursor.moveToNext()); 
} 

另外,如果你想查询限制到某一天,你可以使用一个Calendar推测的开始和结束时间为当天以毫秒为单位 - 因为这是日期是如何存储在SMS表 - 并将相应的比较添加到where子句中。例如:

private static final int DAY_MILLISECONDS = 24 * 60 * 60 * 1000; 
private static final Uri inboxUri = Uri.parse("content://sms/inbox"); 

// Months are zero-based; i.e., JANUARY == 0 
// Phone number must be exact in this example 
private void listMessages(String phoneNumber, int year, int month, int day) { 
    Calendar cal = Calendar.getInstance(); 
    cal.set(Calendar.YEAR, year); 
    cal.set(Calendar.MONTH, month); 
    cal.set(Calendar.DATE, day); 
    cal.set(Calendar.HOUR_OF_DAY, 0); 
    cal.set(Calendar.MINUTE, 0); 
    cal.set(Calendar.SECOND, 0); 
    cal.set(Calendar.MILLISECOND, 0); 

    String[] projection = {"address", "body"}; 
    String whereAddress = "address = ?"; 
    String whereDate = "date BETWEEN " + cal.getTimeInMillis() + 
         " AND " + (cal.getTimeInMillis() + DAY_MILLISECONDS); 
    String where = DatabaseUtils.concatenateWhere(whereAddress, whereDate); 

    Cursor cursor = null; 
    try { 
     cursor = getContentResolver().query(inboxUri, 
              projection, 
              where, 
              new String[]{phoneNumber}, 
              "date DESC LIMIT 5"); 

     if (cursor != null && cursor.moveToFirst()) { 
      do { 
       Log.d("Message", cursor.getString(cursor.getColumnIndex("body"))); 
      } while (cursor.moveToNext()); 
     } 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
    finally { 
     if (cursor != null) { 
      cursor.close(); 
     } 
    } 
}