根据联系人电话号码获取联系人照片 Android - 工作示例 [关闭]

2023-11-23

安卓2.3.3

我查看了有关如何获取“联系人照片”的各种示例。但他们都不适合我。令人惊讶的是,我在 StackOVerFlow 上偶然发现了一段代码,我使用了它并且可以获取“照片”并将其显示在我的 ListView 中的 ImageView 中。

我的应用场景:::

我必须从电话获取数据(图像/照片、联系人姓名、电话号码)并将其显示在 ListView 中(将 CustomView 作为每个项目)

带有 ListView 的 XML 文件 :::

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
     android:id="@+id/txtViewContactsHeader"
     android:layout_width="wrap_content"
     android:layout_height="50dp"
     android:text="Your Contacts (Phone + SIM)"
     android:layout_gravity="center"
     android:gravity="center" />


 <ListView
     android:id="@+id/lv_addcontact"
     android:layout_width="match_parent"
     android:layout_height="0dip"
     android:layout_weight="1" >

</ListView>

 <LinearLayout
     android:layout_width="match_parent"
     android:layout_height="50dp"
     android:orientation="horizontal"
     android:layout_gravity="center"
     android:gravity="center" >

     <Button
         android:id="@+id/btn_addcontact_add"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="ADD CONTACTS" />

     <Button
         android:id="@+id/btn_addcontact_cancel"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="CANCEL" />

 </LinearLayout>

  <LinearLayout
     android:layout_width="match_parent"
     android:layout_height="100dp"
     android:orientation="vertical" >

     <TextView
     android:id="@+id/txtViewNavigation"
     android:layout_width="wrap_content"
     android:layout_height="match_parent"
     android:text="Navigation"
     android:layout_gravity="center"
     android:gravity="center" />

 </LinearLayout>

每个 ListView 项目的 XML 文件 - CustomView :::

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_margin="2dp"    
android:orientation="horizontal" >

<ImageView
    android:id="@+id/imgView_addcontact"
    android:layout_width="0dip"
    android:layout_height="100dp"
    android:layout_weight="0.20"
    android:padding="5dp"
    android:src="@drawable/addcontactsmall2" />

<LinearLayout
    android:layout_width="0dp"
    android:layout_height="100dp"
    android:layout_gravity="center"
    android:layout_weight="0.60"
    android:orientation="vertical"
    android:padding="5dp" >

    <TextView
        android:id="@+id/txtView_addcontact_contactname"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Contact Name"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/txtview_addcontact_phonenumber"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Phone Number"
        android:textSize="16sp" />
</LinearLayout>

<CheckBox
    android:id="@+id/chbk_addcontact"
    android:layout_width="0dp"
    android:layout_height="100dp"
    android:layout_weight="0.10"
    android:layout_gravity="center"
    android:padding="5dp" />

Java 文件 - 代码 :::

import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Photo;
import android.provider.ContactsContract.PhoneLookup;

import android.provider.ContactsContract.Data;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class Class_Add_Contact extends Activity {

    ListView lv_addcontacts;
    Cursor cur;
    ContentResolver cr;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_add_contact);
        readContacts();

        if (!((cur.moveToFirst()) || cur.equals(null) || cur.getCount() == 0)) {

        } else if (cur.getCount() > 0) {
            cur.moveToFirst();
        }

        lv_addcontacts = (ListView) findViewById(R.id.lv_addcontact);

        CustomAdapterAddContacts myad = new CustomAdapterAddContacts();

        lv_addcontacts.setAdapter(myad);

    }

    class CustomAdapterAddContacts extends BaseAdapter {

        @Override
        public int getCount() {
            // TODO Auto-generated method stub

            System.out.println(cur.getCount());

            return cur.getCount(); // c.getCount();
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub

            // View MyView = convertView;

            ContactViewHolder contactViewHolder;

            if (convertView == null) {

                // Inflate the layout
                LayoutInflater li = getLayoutInflater();
                convertView = li.inflate(
                        R.layout.activity_listview_addcontact_item, null);

                contactViewHolder = new ContactViewHolder();

                contactViewHolder.imgContact = (ImageView) convertView
                        .findViewById(R.id.imgView_addcontact);
                contactViewHolder.txtViewContactName = (TextView) convertView
                        .findViewById(R.id.txtView_addcontact_contactname);
                contactViewHolder.txtViewPhoneNumber = (TextView) convertView
                        .findViewById(R.id.txtview_addcontact_phonenumber);
                contactViewHolder.chbkAddContact = (CheckBox) convertView.findViewById(R.id.chbk_addcontact);

                convertView.setTag(contactViewHolder);
            } else {
                contactViewHolder = (ContactViewHolder) convertView.getTag();
            }

                cur.moveToPosition(position);



                // Add Contact Name //

                String name = cur
                        .getString(cur
                                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));

                if (name != null)
                    contactViewHolder.txtViewContactName.setText(name);
                else
                    contactViewHolder.txtViewContactName.setText("Unknown");


                // Add Phone Number //

                String phoneNumber = cur
                        .getString(cur
                                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

                if (phoneNumber != null)
                    contactViewHolder.txtViewPhoneNumber.setText(phoneNumber);
                else
                    contactViewHolder.txtViewPhoneNumber.setText("Unknown");


                Uri uri = getPhotoUri(Long.parseLong(fetchContactIdFromPhoneNumber(phoneNumber)));


                if (uri != null) {
                    contactViewHolder.imgContact.setImageURI(uri);
                } else {
                    contactViewHolder.imgContact
                            .setImageResource(R.drawable.addcontactsmall2);
                }


            return convertView;
        }

        private String fetchContactIdFromPhoneNumber(String phoneNumber) {
            // TODO Auto-generated method stub

            Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,
                    Uri.encode(phoneNumber));
            Cursor cFetch = getContentResolver().query(uri,
                    new String[] { PhoneLookup.DISPLAY_NAME, PhoneLookup._ID },
                    null, null, null);

            String contactId = "";


            if (cFetch.moveToFirst()) {

                cFetch.moveToFirst();

                    contactId = cFetch.getString(cFetch
                            .getColumnIndex(PhoneLookup._ID));

            }

            System.out.println(contactId);

            return contactId;       

        }


        public Uri getPhotoUri(long contactId) {
            ContentResolver contentResolver = getContentResolver();

            try {
                Cursor cursor = contentResolver
                        .query(ContactsContract.Data.CONTENT_URI,
                                null,
                                ContactsContract.Data.CONTACT_ID
                                        + "="
                                        + contactId
                                        + " AND "

                                        + ContactsContract.Data.MIMETYPE
                                        + "='"
                                        + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE
                                        + "'", null, null);

                if (cursor != null) {
                    if (!cursor.moveToFirst()) {
                        return null; // no photo
                    }
                } else {
                    return null; // error in cursor process
                }

            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }

            Uri person = ContentUris.withAppendedId(
                    ContactsContract.Contacts.CONTENT_URI, contactId);
            return Uri.withAppendedPath(person,
                    ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
        }



        public class ContactViewHolder {
            ImageView imgContact;
            TextView txtViewContactName;
            TextView txtViewPhoneNumber;
            CheckBox chbkAddContact;
        }

    }

    private void readContacts() {
        // TODO Auto-generated method stub

        cr = getContentResolver();
        cur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                null, null, null, null);
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();

        if (cur != null) {
            cur.close();
        }
    }
}

我的应用程序的屏幕截图 :::

enter image description here

重要提示::: 它对我有用。我也可能为你工作。但是,我对使用内容提供商不熟悉,因此对于查询可能没有多大帮助。 SO 的专家可以解答您的疑问。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据联系人电话号码获取联系人照片 Android - 工作示例 [关闭] 的相关文章

随机推荐

  • 如何将静态二维数组的指针传递给结构/类?

    当我尝试将数组的指针 其中包含程序中某些函数所需的参数 传递给结构时遇到问题 然后该结构应该传递给这些函数 例如 GSL 希望我以这种方式传递参数 一个小示例程序如下所示 include
  • 如何展开使用 R 中的 igraph 包制作的社区图

    尝试在推文数据中查找社区 不同单词之间的余弦相似度形成邻接矩阵 然后 我根据该邻接矩阵创建了图 图表的可视化是这里的任务 Document Term Matrix dtm DocumentTermMatrix tweets adjust t
  • 对静态文件的请求正在命中 ASP.NET MVC3 中的托管代码

    创建自定义 IHttpModules 时 我意识到对静态文件 例如 css 和 js 文件 的请求正在访问托管模块 可能图片也有同样的问题 IIS 不应该绕过 ASP NET 来获取文件系统中存在的文件吗 例如 public class M
  • 如何将字符串中的空格分隔数字序列转换为整数

    我正在尝试使用将字符串元素转换为整数stoiC 11 中的函数并将其用作参数pow函数 像这样 include
  • Android应用程序更新通知

    我一个月前将我的应用程序上传到 Android 市场 现在我已经上传了它的新版本 我的设备上安装了旧版本 但我没有收到更新通知 当我将应用程序更新到 Android Market 时 是否有任何选项可以向用户发送更新通知 不是默认情况下 市
  • 我应该通过任何方式避免 Django 中的多表(具体)继承吗?

    许多经验丰富的开发人员建议不要使用Django多表继承由于其性能不佳 Django 陷阱 具体继承 by 雅各布 卡普兰 莫斯 Django 的核心贡献者 几乎在所有情况下 抽象继承都是更好的方法 长期来看 我见过不少网站在负载下崩溃了 通
  • 如何使用 Java 邮件发送 html 消息

    我一直在从 Java 发送简单的电子邮件 没有问题 但我现在尝试发送一封 html 电子邮件 如下所示 MimeMessage message new MimeMessage Email getSession message setFrom
  • 如何在 Eclipse Mars 中禁用 css 警告“未知属性”?

    我在 css 文件中收到许多 未知属性 警告 这可能是由于我安装了 e fx clipse 2 0 和 Eclipse Web Developer Tools 如果我使用 e fx clipse css 编辑器打开 css 文件并添加 抑制
  • 删除特定字符串后的所有内容(文本的其余部分)

    我怎样才能删除像 gnirts 这样的字符串后面的所有内容 这可能会让您更好地理解 Before 之后 使用查找和替换 按 CTRL H 打开替换对话框 输入 gnirts 到Find what leave Replace with emp
  • 在不同的 .NET 框架之间共享记录器

    我正在创建一个可以在 Net Core 1 2 Net Core 2 0 和 NET Framework 4 6 之间共享的应用程序框架 所以我选择我的项目的目标框架为 NET Standard 在我的框架项目中 我有用于发送短信或电子邮件
  • 查找 Maven 模块化项目中未使用的代码

    我必须清理一个旧项目 一般知识是该项目包含许多我们可以删除的未使用的代码 这将减少一些麻烦并使维护变得更容易 我发现 Eclipse Core Tools 插件看起来是一个很棒的工具 但在我们的例子中 我们有一个 Maven2 项目 它分为
  • 使用 Mockito 模拟局部范围对象的方法

    我需要一些帮助 Example void method1 MyObject obj1 new MyObject obj1 method1 我想嘲笑obj1 method1 在我的测试中 但为了透明 所以我不想制作和更改代码 Mockito
  • 如何在OpenLayers中获取多边形的坐标

    我一直在寻找如何确定 OpenLayers 中组成多边形 要素 的点的坐标 假设我创建了一个像下面这样的多边形this例子 我需要知道组成多边形的点 这样我就可以将它们保存在某个地方 我敢打赌这很容易 我只是找不到任何东西 可能我不知道我应
  • ARM 未对齐内存访问解决方法

    我必须将源代码移植到运行 Linux 的 ARM 平台 不幸的是我遇到了未对齐的内存访问问题 源代码大量使用指针转换和访问 像下面这样的代码已经像病毒一样在代码库中传播 多亏了 gcc 我可以查明有问题的位置 Wcast align命令行选
  • scipy.io.wavfile.read 无法读取 24 位 .wav 文件

    看起来scipy io wavfile read无法读取 24 位 wav 文件 您知道如何处理它们吗 如果您的 wav 文件未压缩 您可以尝试readwav函数在这里 https gist github com WarrenWeckess
  • WordPress:媒体库网格模式无限加载

    所以这个问题很奇怪 因为对我来说 Wordpress 媒体库在仅网格模式下的 WordPress 管理菜单中不起作用 这是非常奇怪的问题 因为这个问题仅发生在 1 个帐户上 这将是昨天我尝试上传一堆的帐户 将图片添加到媒体库后出现错误 稍后
  • 计算可能的“蛇”密码

    我们都知道移动设备上的新密码屏幕 它由要连接的点矩阵组成 唯一的密码是点的向量 这些点可以连接到自身 但有以下限制 一个点只能连接到另外 1 个点 如果目标点和空闲点在同一条线上 则线路将被迫连接到更近的点 一个例子 由于之前没有连接中间点
  • ClojureScript 不需要 Clojure 的 defstruct 背后的原因是什么?

    defstructClojureScript 不支持 这似乎是设计使然 现在这可能实际上是 Clojure 语言中已弃用的部分 ClojureScript 的设计者只是希望每个人都继续前进 但这只是我的猜测 我的问题是 ClojureScr
  • MATLAB:使用“-append”标志时,将多个变量保存到“-v7.3”(HDF5) .mat 文件似乎更快。怎么会?

    NOTE 本问题涉及 2011 年旧 MATLAB 版本 R2009a 中观察到的问题 根据 2016 年 7 月的以下更新 MATLAB 中的问题 错误似乎不再存在 使用 R2016a 进行测试 向下滚动到问题末尾以查看更新 我正在使用
  • 根据联系人电话号码获取联系人照片 Android - 工作示例 [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 安卓2 3 3 我查看了有关如何获取 联系人照片 的各种示例 但他们都不适合我 令人惊讶的是 我在 StackOVerFlow 上偶然发现了一段代码 我使用了它并且可以获取 照片 并将