2010-03-17 3 views
2

다음 코드를 통해 전화 번호를 검색 할 수 있습니다. 어쨌든, android.provider.Contacts.People API를 사용하여 이메일 주소를 검색 할 수 없습니다. 어떤 아이디어?Android : 안드로이드에서 이메일 주소에 액세스하는 방법

import android.app.AlertDialog; 
import android.app.ExpandableListActivity; 
import android.content.ContentUris; 
import android.content.Context; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.Contacts.People; 
import android.view.View; 
import android.widget.ExpandableListAdapter; 
import android.widget.SimpleCursorTreeAdapter; 
import android.widget.TextView; 
import android.widget.ExpandableListView.OnChildClickListener; 

public class ShowContacts extends ExpandableListActivity implements OnChildClickListener { 
    private int mGroupIdColumnIndex; 

    private String mPhoneNumberProjection[] = new String[] { 
      People.Phones._ID, People.NUMBER // CHANGE HERE 
    }; 


    private ExpandableListAdapter mAdapter; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     // Query for people 
     Cursor groupCursor = managedQuery(People.CONTENT_URI, 
       new String[] {People._ID, People.NAME}, null, null, null); 

     // Cache the ID column index 
     mGroupIdColumnIndex = groupCursor.getColumnIndexOrThrow(People._ID); 

     // Set up our adapter 
     mAdapter = new MyExpandableListAdapter(groupCursor, 
       this, 
       android.R.layout.simple_expandable_list_item_1, 
       android.R.layout.simple_expandable_list_item_1, 
       new String[] {People.NAME}, // Name for group layouts 
       new int[] {android.R.id.text1}, 
       new String[] {People.NUMBER}, // AND CHANGE HERE 
       new int[] {android.R.id.text1}); 
     setListAdapter(mAdapter); 
    } 

    public class MyExpandableListAdapter extends SimpleCursorTreeAdapter { 

     public MyExpandableListAdapter(Cursor cursor, Context context, int groupLayout, 
       int childLayout, String[] groupFrom, int[] groupTo, String[] childrenFrom, 
       int[] childrenTo) { 
      super(context, cursor, groupLayout, groupFrom, groupTo, childLayout, childrenFrom, 
        childrenTo); 
     } 

     @Override 
     protected Cursor getChildrenCursor(Cursor groupCursor) { 
      // Given the group, we return a cursor for all the children within that group 

      // Return a cursor that points to this contact's phone numbers 
      Uri.Builder builder = People.CONTENT_URI.buildUpon(); 

      ContentUris.appendId(builder, groupCursor.getLong(mGroupIdColumnIndex)); 
      builder.appendEncodedPath(People.Phones.CONTENT_DIRECTORY); 
      Uri phoneNumbersUri = builder.build(); 

      return managedQuery(phoneNumbersUri, mPhoneNumberProjection, null, null, null); 
     } 
    } 

    @Override 
    public boolean onChildClick(android.widget.ExpandableListView parent, 
       View v, int groupPosition, int childPosition, long id) { 
      AlertDialog dialog = new AlertDialog.Builder(ShowContacts.this) 
        .setMessage(((TextView) v).getText().toString()) 
        .setPositiveButton("OK", null).create(); 
      dialog.show(); 
      return true; 
    } 
} 

답변

1

CommonsWare에서 권장하는대로 두 모델을 모두 지원하려면 조건부 클래스로드를 사용해야합니다. 어쨌든 신속하고 더러운 해결책은 다음과 같습니다.

private static final String CONTACT_METHODS_PROJECTION[] = new String[] { 
     Contacts.ContactMethods._ID, 
     Contacts.ContactMethods.DATA 
    }; 

private static final int ID_COLUMN_INDEX = 0; 


@Override 
protected Cursor getChildrenCursor(Cursor groupCursor) { 
    // Given the group, we return a cursor for all the children within that group 

    return managedQuery(Contacts.ContactMethods.CONTENT_URI, CONTACT_METHODS_PROJECTION, 
      ContactMethods.PERSON_ID + "= ? AND " + ContactMethods.KIND + " = " + Contacts.KIND_EMAIL, 
      new String[] { Long.toString(groupCursor.getLong(ID_COLUMN_INDEX)) }, 
      null); 
} 
0

먼저 android.provider.Contacts은 Android 2.0에서 더 이상 사용되지 않습니다. 앞으로는 android.provider.ContactsContract을 사용해야하며, 잠시 동안 두 인터페이스를 모두 지원하려면 조건부 클래스 로딩을 사용해야합니다. See here for a sample project은 전자 메일 주소에 액세스하고 두 인터페이스를 모두 지원합니다.

관련 문제