2017-03-16 89 views

回答

0

首先添加此權限

<uses-permission android:name="android.permission.READ_CONTACTS" /> 

使用LoaderManager.LoaderCallbacks界面在你的活動是這樣的: ():

@Override 
public Loader onCreateLoader(int loaderID, Bundle args) { 
Log.d(TAG, "onCreateLoader() >> loaderID : " + loaderID); 

switch (loaderID) { 
case URL_LOADER: 
// Returns a new CursorLoader 
return new CursorLoader(
this, // Parent activity context 
CallLog.Calls.CONTENT_URI,  // Table to query 
null,  // Projection to return 
null,   // No selection clause 
null,   // No selection arguments 
null    // Default sort order 
); 
default: 
return null; 
} 
} 

打電話給你的細節onLoadFinished()方法:

Override 
    public void onLoadFinished(Loader loader, Cursor managedCursor) { 
     Log.d(TAG, "onLoadFinished()"); 

     StringBuilder sb = new StringBuilder(); 

     int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER); 
     int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE); 
     int date = managedCursor.getColumnIndex(CallLog.Calls.DATE); 
     int duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION); 

     sb.append("<h4>Call Log Details <h4>"); 
     sb.append("\n"); 
     sb.append("\n"); 

     sb.append("<table>"); 

     while (managedCursor.moveToNext()) { 
      String phNumber = managedCursor.getString(number); 
      String callType = managedCursor.getString(type); 
      String callDate = managedCursor.getString(date); 
      Date callDayTime = new Date(Long.valueOf(callDate)); 
      String callDuration = managedCursor.getString(duration); 
      String dir = null; 

      int callTypeCode = Integer.parseInt(callType); 
      switch (callTypeCode) { 
       case CallLog.Calls.OUTGOING_TYPE: 
        dir = "Outgoing"; 
        break; 

       case CallLog.Calls.INCOMING_TYPE: 
        dir = "Incoming"; 
        break; 

       case CallLog.Calls.MISSED_TYPE: 
        dir = "Missed"; 
        break; 
      } 

      sb.append("<tr>") 
        .append("<td>Phone Number: </td>") 
        .append("<td><strong>") 
        .append(phNumber) 
        .append("</strong></td>"); 
      sb.append("</tr>"); 
      sb.append("<br/>"); 
      sb.append("<tr>") 
        .append("<td>Call Type:</td>") 
        .append("<td><strong>") 
        .append(dir) 
        .append("</strong></td>"); 
      sb.append("</tr>"); 
      sb.append("<br/>"); 
      sb.append("<tr>") 
        .append("<td>Date & Time:</td>") 
        .append("<td><strong>") 
        .append(callDayTime) 
        .append("</strong></td>"); 
      sb.append("</tr>"); 
      sb.append("<br/>"); 
      sb.append("<tr>") 
        .append("<td>Call Duration (Seconds):</td>") 
        .append("<td><strong>") 
        .append(callDuration) 
        .append("</strong></td>"); 
      sb.append("</tr>"); 
      sb.append("<br/>"); 
      sb.append("<br/>"); 
     } 
     sb.append("</table>"); 

     managedCursor.close(); 

     callLogsTextView.setText(Html.fromHtml(sb.toString())); 
    } 

完整的詳細信息,請參閱這些參考資料:

link1

link two (complete project)

+0

謝謝新,但ÿ問題在於,當我接到電話時,同時我想顯示一個用戶呼叫活動信息對話框 – Mike

+0

這是核心邏輯。在onCreateLoader中調用細節,而不是onload finsh()函數。 – 2017-03-16 07:27:25

+0

查看鏈接2中的MainActivity代碼並更改初始化函數,如下所示: – 2017-03-16 07:33:39