2012-01-08 24 views
7

通話履歴から連絡先を取得しようとしています。私はこのコードを使用して主接点からの連絡先の電話番号を取得することができます。Android - 通話履歴から連絡先を取得するにはどうすればよいですか?

public void getContacts(View view) { 

    Intent intentContact = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
    startActivityForResult(intentContact, 0); 

} 

public void onActivityResult(int requestCode, int resultCode, Intent intent) 
{ 

    if (requestCode == 0) 
    { 
     try { 
     to.setText(getContactInfo(intent)); 
     } catch(NullPointerException e) { 
       // Do nothing ;) 
     } 

    } 

} 
protected String getContactInfo(Intent intent) 
{ 
    String phoneNumber = to.getText().toString(); 
    Cursor cursor = managedQuery(intent.getData(), null, null, null, null); 
    while (cursor.moveToNext()) 
    { 
     String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
     String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 
     if(phoneNumber.endsWith(">")) 
      phoneNumber += ", "+name; 
     else 
     phoneNumber += name; 
     String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 

     if (hasPhone.equalsIgnoreCase("1")) 
      hasPhone = "true"; 
     else 
      hasPhone = "false" ; 

     if (Boolean.parseBoolean(hasPhone)) 


     { 
      Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null); 
      while (phones.moveToNext()) 
      { phoneNumber = phoneNumber + " <" + phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))+">"; 


       } 
      phones.close(); 
     } 


    } 
    cursor.close(); 
    return phoneNumber; 
} 

これは、我々はそれがすべての連絡先とのリストを開き、「連絡先」ボタンをクリックすると、ユーザーは任意の連絡先を選択することができ、それが選択されている何連絡先が[To]フィールドに追加されます。私はまったく同じことをしたいが、すべての連絡先を表示するのではなく、最近使用した人(通話記録)だけを選択して表示したい。

また、グループでもこれを行う方法を伝えることができればいいと思います。

答えて

2

私は自分のバージョンを使用してこれを取得しました。私はダイアログを使ってカーソルをコールログに渡しました。関数は次のとおりです。

public void getCallLog() { 

    String[] callLogFields = { android.provider.CallLog.Calls._ID, 
      android.provider.CallLog.Calls.NUMBER, 
      android.provider.CallLog.Calls.CACHED_NAME /* im not using the name but you can*/}; 
    String viaOrder = android.provider.CallLog.Calls.DATE + " DESC"; 
    String WHERE = android.provider.CallLog.Calls.NUMBER + " >0"; /*filter out private/unknown numbers */ 

    final Cursor callLog_cursor = getActivity().getContentResolver().query(
      android.provider.CallLog.Calls.CONTENT_URI, callLogFields, 
      WHERE, null, viaOrder); 

    AlertDialog.Builder myversionOfCallLog = new AlertDialog.Builder(
      getActivity()); 

    android.content.DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialogInterface, int item) { 
      callLog_cursor.moveToPosition(item); 

      Log.v("number", callLog_cursor.getString(callLog_cursor 
        .getColumnIndex(android.provider.CallLog.Calls.NUMBER))); 

      callLog_cursor.close(); 

     } 
    }; 
    myversionOfCallLog.setCursor(callLog_cursor, listener, 
      android.provider.CallLog.Calls.NUMBER); 
    myversionOfCallLog.setTitle("Choose from Call Log"); 
    myversionOfCallLog.create().show(); 
} 
0

ContactsContract.Contacts.CONTENT_STREQUENT_URIを使用すると、頻繁に呼び出される連絡先とスター付きの連絡先の両方を使用できます。

+0

ContentProviderを使用してみてください.... – subrussn90

関連する問題