2016-08-04 17 views
0

Ich frage mich, wie die letzten fünf SMS von einer bestimmten Handynummer an einem bestimmten Datum zu lesen.Lesen der letzten 5 SMS von einer bestimmten Nummer an einem bestimmten Datum

Ich weiß, wie man alle SMS von einem bestimmten Absender liest, und wie man die letzte SMS liest, aber ich kann nicht die letzten SMS holen und lesen. Ich versuchte, sie zu lesen, indem

"date DESC LIMIT 5" 

Mein Code wie unter

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); 
} 

Aber jedes Mal, es ist nur die letzte Meldung angezeigt.

Antwort

0

Sie sehen nur eine Nachricht, weil Ihr Code nur den ersten Datensatz im zurückgegebenen Cursor verarbeitet. Sie müssen die Cursor Schleife durchlaufen, um den Rest zu behandeln. Zum Beispiel:

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

Auch, wenn Sie die Abfrage auf einen Tag beschränken möchten, können Sie eine Calendar verwenden, um die Start- und Endzeiten für diesen Tag in Millisekunden Figur - wie das ist, wie Daten in der gespeicherten SMS-Tabelle - und fügen Sie den entsprechenden Vergleich zu der where Klausel hinzu. Zum Beispiel:

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(); 
     } 
    } 
}