Android:如何在 Android 中访问电子邮件地址

标签 android email

我有以下代码,通过它我可以检索电话号码。不知何故,我无法使用 android.provider.Contacts.People API 检索电子邮件地址。有什么想法吗?

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; 
     } 
}

最佳答案

根据 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); 
} 

关于Android:如何在 Android 中访问电子邮件地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2462097/

相关文章:

android - 如何改变单选按钮的半径

android - 如何做一个显示你当前位置的 map View 类似于谷歌地图?

android - 为什么设计者使用 "@+id"而不是 "@id"进行约束?

android - 在 Google Play 的 Billing API v3 中解决消耗品的 API-purchase-logic-flaws(与使用 API v3 消耗品的每个人相关)

email - Grails发送HTML Mail签名的方法错误

android - 如何在 Android 中重置 GPS

c# - 如何在C#中保存电子邮件附件

Java 电子邮件解析器

PHP邮件换行问题

javascript - 通过电子邮件发送 Div 的内容