2015-01-13 51 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”为空 –