安卓:我怎样才能访问电子邮件地址的android [英] Android: How can i access email addresses in android

查看:118
本文介绍了安卓:我怎样才能访问电子邮件地址的android的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下的code,通过它,我能够检索电话号码。不知怎的,我不能够使用android.provider.Contacts.People API来检索电子邮件地址。任何想法?

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

公共类ShowContacts扩展ExpandableListActivity实现OnChildClickListener {
    私人诠释mGroupIdColumnIndex;

    私人字符串mPhoneNumberProjection [] =新的String [] {
            People.Phones._ID,People.NUMBER //改变这里
    };


    私人ExpandableListAdapter mAdapter;


    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);


        //查询人
        光标groupCursor = managedQuery(People.CONTENT_URI,
                新的String [] {People._ID,People.NAME},NULL,NULL,NULL);

        //缓存中的ID列索引
        mGroupIdColumnIndex = groupCursor.getColumnIndexOrThrow(People._ID);

        //设置我们的适配器
        mAdapter =新MyExpandableListAdapter(groupCursor,
                本,
                android.R.layout.simple_expandable_list_item_1,
                android.R.layout.simple_expandable_list_item_1,
                新的String [] {} People.NAME,//名称为组布局
                新的INT [] {} android.R.id.text1,
                新的String [] {} People.NUMBER,//和零钱。
                新的INT [] {android.R.id.text1});
        setListAdapter(mAdapter);
    }

    公共类MyExpandableListAdapter扩展SimpleCursorTreeAdapter {

        公共MyExpandableListAdapter(光标指针,上下文语境,诠释的GroupLayout,
                INT childLayout,字符串[] groupFrom,INT [] groupTo,字符串[] childrenFrom,
                INT [] childrenTo){
            超(背景下,光标的GroupLayout,groupFrom,groupTo,childLayout,childrenFrom,
                    childrenTo);
        }

        @覆盖
        受保护的光标getChildrenCursor(光标groupCursor){
            //由于组,我们返回游标该组内的所有儿童

            //返回一个指针指向该联系人的电话号码
            Uri.Builder建设者= People.CONTENT_URI.buildUpon();

            ContentUris.appendId(制造商,groupCursor.getLong(mGroupIdColumnIndex));
            builder.appendEn codeDPATH(People.Phones.CONTENT_DIRECTORY);
            乌里phoneNumbersUri = builder.build();

            返回managedQuery(phoneNumbersUri,mPhoneNumberProjection,NULL,NULL,NULL);
        }
    }

    @覆盖
     公共布尔onChildClick(android.widget.ExpandableListView父母,
               视图V,INT groupPosition,诠释childPosition,长ID){
          AlertDialog对话框=新AlertDialog.Builder(ShowContacts.this)
                    .setMessage(((TextView中)V).getText()的toString())
                    .setPositiveButton(OK,NULL).create();
          dialog.show();
          返回true;
     }
}
 

解决方案

所推荐的 CommonsWare 你应该使用有条件的类加载来支持这两种模式。无论如何,一个快速和肮脏的解决办法是:

 私有静态最后弦乐CONTACT_METHODS_PROJECTION [] =新的String [] {
        Contacts.ContactMethods._ID,
        Contacts.ContactMethods.DATA
    };

私有静态最终诠释ID_COLUMN_INDEX = 0;


@覆盖
受保护的光标getChildrenCursor(光标groupCursor){
    //由于组,我们返回游标该组内的所有儿童

    返回managedQuery(Contacts.ContactMethods.CONTENT_URI,CONTACT_METHODS_PROJECTION,
            ContactMethods.PERSON_ID +=?和+ ContactMethods.KIND +=+ Contacts.KIND_EMAIL,
            新的String [] {Long.toString(groupCursor.getLong(ID_COLUMN_INDEX))},
            空值);
}
 

I have the following code through which i am able to retrieve phone numbers. Somehow , i am not able to retrieve email addresses by using android.provider.Contacts.People API. Any ideas?

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

解决方案

As recommended by CommonsWare you should use conditional class loading to support both models. Anyway, a quick and dirty solution is:

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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆