2013-02-02 14 views
5

私のアプリでは、このコードを使用してすべての通話記録を取得しています。私のアンドロイド携帯電話のすべての通話記録を返します。特定の日付から電話ログを取得する方法

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]に日付値を割り当てるときに、 createDate(2013,1,1).toString()。 String [] mSelectionArgs = {String.valueOf(createDate(2013,1,1))}のように、空の文字列を作成してすぐに破棄するのではなく、文字列の値を初期化する方が良いでしょう。 – Brandon

+1

ブランドンの修正が組み込まれていれば、アップアップの答えが出ます。 – 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

関連する問題