2013-02-02 19 views
5

中的特定日期獲取通話記錄在我的應用程序中,我通過使用此代碼獲取所有通話記錄,並將所有通話記錄返回給我的android手機。如何從android

public class CallLogHelper { 

    public static Cursor getAllCallLogs(ContentResolver cr) { 
     // reading all data in descending order according to DATE 
     String strOrder = android.provider.CallLog.Calls.DATE + " DESC"; 
     Uri callUri = Uri.parse("content://call_log/calls"); 
     Cursor curCallLogs = cr.query(callUri, null, null, null, strOrder); 
     return curCallLogs; 
    } 

    public static void insertPlaceholderCall(ContentResolver contentResolver, 
      String name, String number) { 
     ContentValues values = new ContentValues(); 
     values.put(CallLog.Calls.NUMBER, number); 
     values.put(CallLog.Calls.DATE, System.currentTimeMillis()); 
     values.put(CallLog.Calls.DURATION, 0); 
     values.put(CallLog.Calls.TYPE, CallLog.Calls.OUTGOING_TYPE); 
     values.put(CallLog.Calls.NEW, 1); 
     values.put(CallLog.Calls.CACHED_NAME, name); 
     values.put(CallLog.Calls.CACHED_NUMBER_TYPE, 0); 
     values.put(CallLog.Calls.CACHED_NUMBER_LABEL, ""); 
     Log.d("Call Log", "Inserting call log placeholder for " + number); 
     contentResolver.insert(CallLog.Calls.CONTENT_URI, values); 
    } 

} 

但我的問題是,我想從特定的日期,而不是所有的通話記錄中獲取通話記錄。我不知道如何使用查詢從特定日期獲取通話記錄。 幫我謝謝

回答

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

很確定這段代碼在將日期值分配給mSelectionArgs [1]時會導致OOB異常,應該是mSelectionArgs [0] = CREATEDATE(2013,1,1)的ToString()。更好的方法是初始化字符串值,而不是創建一個空字符串,然後立即丟棄它,如下所示:String [] mSelectionArgs = {String.valueOf(createDate(2013,1,1))}。 – Brandon

+1

如果將Brandon的修補程序合併,請問upvote答案。 – Kobor42

+4

嗨,大家好,我使用了上面的代碼,但即使我在通話記錄中有數據,我仍然得到一個空的光標?有任何想法嗎? – 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----------------------------------"); 

    } 

即返回是25/05/2014 & 30/05/2014之間的通話記錄。返回的值全部存儲在sb變量中,你可以在TextView中設置這個值進行測試

+0

這真的很有幫助謝謝。 – Dhamodharan

+0

@Dhamodharan,不客氣! :) – Vattic