2013-02-02 12 views
5

In meiner App bekomme ich das gesamte Anrufprotokoll mit diesem code.it gib mir alle Anrufliste in meinem Android-Handy.So erhalten Sie das Anrufprotokoll von bestimmten Datum in Android

Aber mein Problem ist, dass ich das Anrufprotokoll von einem bestimmten Datum abrufen möchte, nicht alle Anruflisten. Ich habe keine Ahnung, wie man die Abfrage verwendet, um das Anrufprotokoll von einem bestimmten Datum zu erhalten. Helfen Sie mir Dank

Antwort

5
 String[] strFields = { 
       android.provider.CallLog.Calls.NUMBER, 
       android.provider.CallLog.Calls.TYPE, 
       android.provider.CallLog.Calls.CACHED_NAME, 
       android.provider.CallLog.Calls.DATE, 
       android.provider.CallLog.Calls.DURATION, 

       }; 

     // Defines a string to contain the selection clause 
     String mSelectionClause = android.provider.CallLog.Calls.DATE+ " >= ?"; 

     // Initializes an array to contain selection arguments 
     String[] mSelectionArgs = { createDate(2013,1,1).toString() }; 

     Cursor mCallCursor = currentContext.getContentResolver().query(
       android.provider.CallLog.Calls.CONTENT_URI, 
       strFields, 
       mSelectionClause, 
       mSelectionArgs, 
       null 
       ); 

     return mCallCursor; 

public static Long createDate(int year, int month, int day) 
{ 
    Calendar calendar = Calendar.getInstance(); 

    calendar.set(year, month, day); 

    return calendar.getTimeInMillis(); 

} 
+2

Ziemlich sicher, dass dieser Code verursachen und OOB-Ausnahme bei Zuweisung des Datumswerts zu mSelectionArgs [1] sollte mSelectionArgs [0] = sein createDate (2013,1,1) .toString(). Besser wäre es, den String-Wert zu initialisieren, anstatt eine leere Zeichenfolge zu erstellen und dann sofort zu verwerfen, wie in: String [] mSelectionArgs = {String.valueOf (createDate (2013,1,1))}. – Brandon

+1

Wird die Antwort beantwortet, wenn Brandon 'Fix eingebaut ist. – Kobor42

+4

Hallo Leute, ich habe den obigen Code verwendet, aber ich bekomme immer noch einen leeren Cursor, obwohl ich Daten im Anrufprotokoll habe? irgendwelche Ideen? – kAnNaN

3
StringBuffer sb = new StringBuffer(); 
    String strOrder = android.provider.CallLog.Calls.DATE + " DESC"; 
    Uri callUri = Uri.parse("content://call_log/calls"); 

    Calendar calendar = Calendar.getInstance(); 

    calendar.set(2014, Calendar.MAY, 25); 
    String fromDate = String.valueOf(calendar.getTimeInMillis()); 
    calendar.set(2014, Calendar.MAY, 30); 
    String toDate = String.valueOf(calendar.getTimeInMillis()); 
    String[] whereValue = {fromDate,toDate}; 


    Cursor cur = cr.query(callUri, null, android.provider.CallLog.Calls.DATE+" BETWEEN ? AND ?", whereValue, strOrder); 

    //Cursor cur = cr.query(callUri, null, android.provider.CallLog.Calls.DATE+" >= ?", whereValue, strOrder); 
    // loop through cursor 
    while (cur.moveToNext()) { 
     String callNumber = cur.getString(cur 
       .getColumnIndex(android.provider.CallLog.Calls.NUMBER)); 

     String callName = cur 
       .getString(cur 
         .getColumnIndex(android.provider.CallLog.Calls.CACHED_NAME)); 

     String callDate = cur.getString(cur 
       .getColumnIndex(android.provider.CallLog.Calls.DATE)); 
     SimpleDateFormat formatter = new SimpleDateFormat(
       "dd-MMM-yyyy HH:mm"); 
     String dateString = formatter.format(new Date(Long 
       .parseLong(callDate))); 

     String callType = cur.getString(cur 
       .getColumnIndex(android.provider.CallLog.Calls.TYPE)); 
     String dir=null; 
     int dircode = Integer.parseInt(callType); 
     switch (dircode) { 
     case CallLog.Calls.OUTGOING_TYPE: 
      dir = "OUTGOING"; 
       break; 
     case CallLog.Calls.INCOMING_TYPE: 
      dir = "INCOMING"; 
       break; 
     case CallLog.Calls.MISSED_TYPE: 
      dir = "MISSED"; 
       break; 
    } 

     String isCallNew = cur.getString(cur 
       .getColumnIndex(android.provider.CallLog.Calls.NEW)); 

     String duration = cur.getString(cur 
       .getColumnIndex(android.provider.CallLog.Calls.DURATION)); 

     sb.append("\nPhone Number:--- " + callNumber + " \nName:--- "+ callName +" \nCall Type dir:--- " + dir + " \nCall Date:--- " + dateString + " \n duration in sec :--- " + duration); 
     sb.append("\n----------------------------------"); 

    } 

Das Anrufprotokoll, das zwischen 25/05/2014 & 30/05/2014 zurückgekehrt ist. Der zurückgegebene Wert ist alle in SB-Variable gespeichert, können Sie diesen Wert in einem TextView zum Testen

+0

Es ist wirklich hilfreich, danke. – Dhamodharan

+0

@Dhamodharan, Gern geschehen! :) – Vattic

Verwandte Themen