2015-01-13 7 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

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()를 수정 로그 retreive하는 매니페스트

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

사용에 다음 코드를 다음과 같은 권한을 추가합니다. 쿼리 (CallLog .Calls.CONTENT_URI, null, CallLog.Calls.NUMBER + "=?", 새 문자열 [] {전화}, strOrder); 01-16 03 : 35 : 56.782 : E/AndroidRuntime (824) : java.lang.RuntimeException : 활동을 시작할 수 없습니다. ComponentInfo {com.example.econtact/com.example.econtact .CallLogs} : java.lang.IllegalArgumentException : 인덱스 1의 바인드 값이 null입니다. 01-16 03 : 35 : 56.782 : E/AndroidRuntime (824) : \t android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2180)) – radhe12

+0

"바인드 값"은 선택 항목의 selectionArgs를 쿼리()에 삽입하는 것으로 간주됩니다. 해당 selArgs 값이 null 인 경우 –

+0

"strOrder"가 null이거나 "phone"이 null 인 경우 –