安卓:我怎样才能访问电子邮件地址的android [英] Android: How can i access email addresses in android
本文介绍了安卓:我怎样才能访问电子邮件地址的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屋!
查看全文