2015-01-13 50 views
0

我想顯示特定來電者的通話記錄號碼從另一個活動獲取,但查詢我試圖不工作,請給解決方案。在評論中的代碼是我試過的。 感謝特定號碼的通話記錄

public class CallLogs extends Activity { 

    TextView tv,tv2; 
    //ListView lv; 
    //SimpleCursorAdapter adapter; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_call_logs);   
     tv=(TextView)findViewById(R.id.textView1); 
     tv2=(TextView)findViewById(R.id.textView2); 
     //lv=(ListView)findViewById(R.id.listView1); 

    getCallDetails(); 
    String phone = getIntent().getExtras().getString("Phone"); 
    tv2.setText(phone); 
} 

    private void getCallDetails() { 
     String phone = getIntent().getExtras().getString("Phone"); 
     StringBuffer sb = new StringBuffer(); 
     String strOrder = android.provider.CallLog.Calls.DATE + " DESC"; 
     /* Query the CallLog Content Provider */ 
     Cursor managedCursor = managedQuery(CallLog.Calls.CONTENT_URI, null, 
     /*CallLog.Calls.NUMBER+" = ?"*/null,/*new String[]{phone}*/null, strOrder); 
     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("Call Log :"); 
     while (managedCursor.moveToNext()) { 
     String phNum = managedCursor.getString(number); 
     String callTypeCode = managedCursor.getString(type); 
     String strcallDate = managedCursor.getString(date); 
     Date callDate = new Date(Long.valueOf(strcallDate)); 
     String callDuration = managedCursor.getString(duration); 
     String callType = null; 
     int callcode = Integer.parseInt(callTypeCode); 
     switch (callcode) { 
     case CallLog.Calls.OUTGOING_TYPE: 
     callType = "Outgoing"; 
     break; 
     case CallLog.Calls.INCOMING_TYPE: 
     callType = "Incoming"; 
     break; 
     case CallLog.Calls.MISSED_TYPE: 
     callType = "Missed"; 
     break; 
     } 
     sb.append("Phone Number: " + phNum + " \nCall Type:" 
     + callType + " \nCall Date: " + callDate 
     + " \nCall duration in sec : " + callDuration); 
     sb.append("\n--------------------------"); 

     // adapter = new SimpleCursorAdapter(this,R.layout.custcontview,managedCursor,new   String[]{"NUMBER","TYPE","DATE","DURATION"},new int[] {R.id.ccontNo,R.id.ccontName,R.id.ccontType,R.id.textView1}); 
     } 
     tv.setText(sb); 
    // lv.setAdapter(adapter); 
    // managedCursor.close(); 

    } 

    } 

回答

0

,添加以下權限清單中

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

使用下面的代碼中檢索日誌

public void getLogsByNumber(String[] strNumber) { 
    Cursor cursor = getContentResolver().query(CallLog.Calls.CONTENT_URI, null, CallLog.Calls.NUMBER + " = ? ", strNumber , ""); 

    if (cursor.moveToFirst()) { 

     while (cursor.moveToNext()) { 
      String id = cursor.getString (cursor.getColumnIndex (CallLog.Calls._ID)); 
      String number = cursor.getString (cursor.getColumnIndex (CallLog.Calls.NUMBER)); 
      String name = cursor.getString (cursor.getColumnIndex (CallLog.Calls.CACHED_NAME)); 

     } 

     } 

} 
+0

我修改了這一行 光標managedCursor = getContentResolver()查詢(CallLog .Calls.CONTENT_URI,null,CallLog.Calls.NUMBER +「=?」,new String [] {phone},strOrder); 但得到此錯誤(logcat): 01-16 03:35:56.782:E/AndroidRuntime(824):java.lang.RuntimeException:無法啓動活動ComponentInfo {com.example.econtact/com.example.econtact .CallLogs}:java.lang.IllegalArgumentException:索引1處的綁定值爲空 01-16 03:35:56.782:E/AndroidRuntime(824):\t at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180 ) – radhe12

+0

「綁定值」顯然是指您插入到query()中的選擇的selectionArgs。如果這樣的selArgs值爲空, –

+0

可能您的「strOrder」爲空或「phone」爲空 –