2016-01-28 2 views
2

Я новичок в android и работаю над приложением, где мне нужны все журналы исходящих вызовов, номер, продолжительность звонка и имя контакта. Поэтому мой вопрос: могу ли я получить имя и номер исходящего вызова для таблицы CallLog.Calls.CONTENT_URI для системы Android, или мне нужно прочитать ее из отдельной таблицы и отобразить ее. Ниже мой код. Заранее спасибо.Как я могу получить имя контакта из таблицы android (CallLog.Calls.CONTENT_URI)?

 
private String getCallDetails() { 

     StringBuffer sb = new StringBuffer(); 
     // Cursor managedCursor = 
     // getContentResolver().query(CallLog.Calls.CONTENT_URI, null, 
     // null, null, null); 

     Cursor managedCursor = getContentResolver().query(CallLog.Calls.CONTENT_URI, null, CallLog.Calls.DATE + ">?", 
       new String[] { String.valueOf("1451586601000") }, CallLog.Calls.NUMBER + " asc"); 
     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); 
     int name = managedCursor.getColumnIndex(CallLog.Calls.CACHED_NAME); 
     // int geoCodeColumn = 
     // managedCursor.getColumnIndex(CallLog.Calls.GEOCODED_LOCATION); 

     // sb.append("Call Details :"); 
     while (managedCursor.moveToNext()) { 
      String phNumber = managedCursor.getString(number); 
      String callType = managedCursor.getString(type); 
      String callDate = managedCursor.getString(date); 
      String callerName = managedCursor.getString(name); 
      // long calldate_timeStamp= Long.parseLong(callDate); 
      // long temp_time = 1451586601000L; 
      // if(calldate_timeStamp>temp_time){ 
      // String geoCode = managedCursor.getString(geoCodeColumn); 
      Date callDayTime = new Date(Long.valueOf(callDate)); 
      String callDuration = managedCursor.getString(duration); 
      String dir = null; 
      int dircode = Integer.parseInt(callType); 
      switch (dircode) { 
      case CallLog.Calls.OUTGOING_TYPE: 
       dir = "OUTGOING"; 
       int total_call_duration = Integer.parseInt(callDuration); 
       total_time = total_time + total_call_duration; 
       MyContact dialedContact = new MyContact(); 
       dialedContact.setPhoneNumber(Long.parseLong(phNumber)); 
       dialedContact.setCallDuration(Integer.parseInt(callDuration)); 
       // dialedContact.se 
       sb.append("\nPhone Number:--- " + phNumber + " \nCallType:--- " 
       + dir + " \nCall Date:--- " + callDayTime 
       + " \nCall duration in sec :--- " + callDuration+ " \nGeocode: "); 
       sb.append("\n----------------------------------"); 

       break; 

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

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

     // } 
     managedCursor.close(); 
    // sb.append("" + total_time/60);// call duration in minute 
     return sb.toString(); 

    } 

ответ

0

Понадобится:

1) Права доступа

Добавить разрешение на чтение данных контактов в манифесте приложения.

2) Вызов Contact Picker

В вашей деятельности, создать Intent, который просит систему, чтобы найти активность, которая может выполнять действия PICK из элементов в Контактах URI.

Цель намерения = новое намерение (Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); Вызов startActivityForResult, передавая в этом намерении (и целое число кода запроса, PICK_CONTACT в этом примере). Это приведет к тому, что Android запустит активность, зарегистрированную для поддержки ACTION_PICK в People.CONTENT_URI, а затем вернется к этому действию, когда выбор сделан (или отменен).

startActivityForResult(intent, PICK_CONTACT); 

3) Прослушивание результата

Также в вашей деятельности, переопределить метод onActivityResult слушать возвращения из «выберите контакт» активность была запущена на шаге 2. Вы должны проверить что возвращаемый код запроса соответствует ожидаемому значению, а результат - RESULT_OK.

Вы можете получить URI выбранного контакта, вызвав getData() в параметре Intent данных. Чтобы получить имя выбранного контакта, вам нужно использовать этот URI для создания нового запроса и извлечения имени из возвращаемого курсора.

@Override 
public void onActivityResult(int reqCode, int resultCode, Intent data) { 
    super.onActivityResult(reqCode, resultCode, data); 
switch (reqCode) { 
case (PICK_CONTACT) : 
if (resultCode == Activity.RESULT_OK) { 
Uri contactData = data.getData(); 
Cursor c = getContentResolver().query(contactData, null, null, null, null); 
if (c.moveToFirst()) { 
String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
// TODO Whatever you want to do with the selected contact name. 
    } 
} 
break; 
    } 
} 
Смежные вопросы