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

2024-06-19

我有以下代码,通过它我可以检索电话号码。不知何故,我无法使用 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); 
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:如何在 Android 中访问电子邮件地址 的相关文章

  • Android - 如何以编程方式定义 ShapeDrawables?

    我想要实现的是使用内部有几个层的 Drawable 但在运行时控制一些值 例如渐变的 startColor 这是 my layered shape xml 中的内容
  • 无法运行 ActionBarSherlock

    我有一个 2 2 android 项目 我想添加 ActionBarSherlock 当我运行我的项目时 我收到此错误 C Users vitaly Downloads ActionBarSherlock 4 2 0 ActionBarSh
  • Android 和 Java Uuid

    我想为我的应用程序生成一个uuid 我尝试了很多东西 例如wifi mac地址 获取android id 序列号 从设备创建伪uuidandroid os Build特性 我还知道java本身有Uuid创建者类java util UUID
  • Android 在 Nexus 设备上隐藏软键

    我想在用户启动我的应用程序时隐藏软键栏 主页 后退 菜单 我尝试使用 getWindow getDecorView setSystemUiVisibility View SYSTEM UI FLAG HIDE NAVIGATION 但不幸的
  • 更改Android TabWidget底部栏颜色

    如何更改 TabWidget 底部栏的颜色 我已经成功更改了选项卡背景颜色 但底部栏仍然是灰色 橙色 并且我在 Android 文档和源代码中找不到与此相关的任何信息 谢谢 See 启用 禁用此行 tabHost getTabWidget
  • Jetpack Compose 预览未显示

    我似乎在撰写预览时遇到问题 当我使用 preview 注释撰写方法时 布局面板不会出现 我假设我缺少依赖项 但我已从此处复制并粘贴了代码https developer android com jetpack compose setup ht
  • Android 上有某种 ASLR 保护吗?

    我想知道是否有人可以访问具有从程序的一个实例到另一个实例的函数地址相同的库 在同一设备上运行时 地址空间布局将非常一致 许多主要系统库都是由 zygote 预加载的 因此由它分叉出来的子级继承为共享映射 以区分为应用程序 我认为在虚拟内存级
  • AsyncTask加载图像RecyclerView

    我正在尝试创建一个与该应用程序类似的应用程序 一个在回收视图中包含一些图像和描述 卡片视图 的应用程序 https lh5 ggpht com At pHbZqdzlgmAqY0jbiztDYIAts1wOYWGTOHibmFHuq8CFA
  • 在 webview 片段中实现后退按钮

    我想在我的应用程序中实现后退按钮 我正在使用每个片段显示不同的网络视图 现在 如果我按后退按钮 无论我在哪里 它都会关闭应用程序 我希望它能像浏览器一样返回 我有我的MainActivity java fragment1 java等直到fr
  • 如果使用 PackageManager 禁用应用程序图标,是否会导致该应用程序的自动更新出现问题?

    我有一个应用程序 其中使用以下代码隐藏应用程序图标 PackageManager p getApplicationContext getPackageManager p setComponentEnabledSetting getCompo
  • 使用 ADB 更改 Android 壁纸?

    我想知道是否可以使用我的笔记本电脑从 ADB 更改 Android 壁纸 我不知道是否存在任何命令 或者我是否需要将图片复制到文件夹或编辑文本文件 如果可以的话 我需要通过 ADB 解决这个问题 谢谢大家 您只需要启动正确的壁纸设置意图 由
  • 如何将 csv/文本文件从 Android 手机发送到 WiFi 打印机?

    我正在开发一个 Android 应用程序 我应该从数据库中获取 csv txt 文件格式的数据 然后我必须将文件发送到 wifi 打印机 有谁知道我如何开始这样做 答案终于很简单 Socket client new Socket IP PO
  • 我可以通过编程方式选择 Android 布局文件夹吗?

    我正在构建一个 Android 应用程序 它使用不同的布局文件夹 即 Large xlarge 等 根据屏幕尺寸调整大小 唯一的问题是 我想为用户提供一种在小屏幕布局和大屏幕布局之间切换的方法 以防他们拥有无法识别 xlarge 标签的前蜂
  • Android 堆栈跟踪显示生产 Firebase crashlytics 中的测试代码

    该应用程序的 Play 商店版本的 Firebase crashlytics 中报告了该异常 当用户进入启动活动时会发生这种情况 任何帮助 将不胜感激 谢谢 没有其他可用的堆栈跟踪有助于跟踪代码发生的位置 Fatal Exception j
  • Android Path addArc 在canvas中两点之间

    我正在尝试在 android 中绘制弧线 在IOS中 用这个方法确实很简单 path addArcWithCenter radius startAngle endAngle clockwise 在android中 我有3个点 我的圆的中心
  • 如何暂时禁用Android按钮[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我想暂时禁
  • 将阿拉伯语从 android 发送到 PHP 文件

    尝试使用下面的代码将阿拉伯文本从 android 发送到 PHP 文件 Button setOnClickListener new OnClickListener public void onClick View v TODO Auto g
  • 如何在 Android Q 上将照片广播到图库

    我使用这些代码拍照并将照片广播到画廊 它有效 我发现我的广播功能使用MediaStore Images ImageColumns DATA and Intent ACTION MEDIA SCANNER SCAN FILE 并且这些已被弃用
  • PopupWindow 在 Android API 28 的自定义键盘上被剪切

    我做了一个定制键盘 当您长按某个键时 会出现PopupWindow在按键上方显示一些额外的选项 问题在于 在 API 28 中 此弹出窗口被剪切 甚至顶行完全隐藏 我已经为 API with https stackoverflow com
  • 如何从双 SIM 卡设备获取两个电话号码?

    我知道如何获取用户的电话号码 但假设用户的手机是双 SIM 卡 有什么办法可以得到两个电话号码吗 目前我只能获取有效的电话号码 如果电话号码确实存储在SIM卡中 那么您可以使用subscriptionmanager API https de

随机推荐