安卓获取通讯录app制作

制作获取安卓通讯录的应用程序需要使用Android中的Content Provider机制。Content Provider允许应用程序之间共享数据,并提供数据查询、插入、更新和删除等操作。

以下是实现步骤:

1. 在AndroidManifest.xml文件中声明读取通讯录的权限

```xml

```

2. 创建一个类ContactsHelper,用来获取通讯录数据。这个类主要的作用是查询和获取通讯录的联系人信息。

```java

public class ContactsHelper {

public static List getAllContacts(Context context) {

List contacts = new ArrayList<>();

Cursor cursor = null;

try {

// 查询通讯录的数据

cursor = context.getContentResolver().query(

ContactsContract.Contacts.CONTENT_URI,

null,

null,

null,

ContactsContract.Contacts.DISPLAY_NAME + " ASC"

);

// 处理查询结果

if (cursor != null && cursor.getCount() > 0) {

while (cursor.moveToNext()) {

String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));

String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

// 获取通讯录联系人的电话号码

String phoneNumber = "";

Cursor phoneCursor = context.getContentResolver().query(

ContactsContract.CommonDataKinds.Phone.CONTENT_URI,

null,

ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + id,

null,

null

);

if (phoneCursor != null) {

if (phoneCursor.moveToFirst()) {

phoneNumber = phoneCursor.getString(

phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

}

phoneCursor.close();

}

Contact contact = new Contact(id, name, phoneNumber);

contacts.add(contact);

}

}

} catch (Exception e) {

e.printStackTrace();

} finally {

if (cursor != null) {

cursor.close();

}

}

return contacts;

}

}

```

3. 创建一个联系人实体类Contact,用来封装通讯录中每个联系人的基本信息,如id、姓名和电话号码。

```java

public class Contact {

private String id;

private String name;

private String phoneNumber;

public Contact(String id, String name, String phoneNumber) {

this.id = id;

this.name = name;

this.phoneNumber = phoneNumber;

}

// 省略getters和setters方法

}

```

4. 在MainActivity中调用ContactsHelper类来获取通讯录数据,并将数据传递给RecyclerView使用。

```java

public class MainActivity extends AppCompatActivity {

private RecyclerView mRecyclerView;

private ContactsAdapter mAdapter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mRecyclerView = findViewById(R.id.recycler_view);

mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

mAdapter = new ContactsAdapter();

mRecyclerView.setAdapter(mAdapter);

List contacts = ContactsHelper.getAllContacts(this);

mAdapter.setData(contacts);

}

}

```

5. 创建一个RecyclerView的适配器ContactsAdapter,将通讯录数据显示在RecyclerView中。

```java

public class ContactsAdapter extends RecyclerView.Adapter {

private List mData = new ArrayList<>();

public void setData(List data) {

mData.clear();

if (data != null && data.size() > 0) {

mData.addAll(data);

}

notifyDataSetChanged();

}

@NonNull

@Override

public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

View view = LayoutInflater.from(viewGroup.getContext()).inflate(

R.layout.item_contact, viewGroup, false);

return new ViewHolder(view);

}

@Override

public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {

Contact contact = mData.get(i);

viewHolder.mNameTextView.setText(contact.getName());

viewHolder.mPhoneNumberTextView.setText(contact.getPhoneNumber());

}

@Override

public int getItemCount() {

return mData.size();

}

static class ViewHolder extends RecyclerView.ViewHolder {

private TextView mNameTextView;

private TextView mPhoneNumberTextView;

ViewHolder(@NonNull View itemView) {

super(itemView);

mNameTextView = itemView.findViewById(R.id.tv_name);

mPhoneNumberTextView = itemView.findViewById(R.id.tv_phone_number);

}

}

}

```

6. 创建一个item_contact.xml布局文件,用来显示通讯录联系人的基本信息。

```xml

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="vertical"

android:padding="16dp">

android:id="@+id/tv_name"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textAppearance="?attr/textAppearanceLarge"/>

android:id="@+id/tv_phone_number"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textAppearance="?attr/textAppearanceMedium"/>

```

以上就是获取安卓通讯录的应用程序的制作过程,通过使用Content Provider机制和RecyclerView来实现。


相关知识:
python如何开发安卓app
Python 作为一种高级编程语言,一直是开发者们的首选,其简单易学、代码简洁、功能丰富等特点,成为了众多开发者的选择。那么,Python 能否用于安卓 App 的开发呢?答案是肯定的。本文将从原理和详细介绍两个方面来讲解 Python 如何开发安卓 Ap
2023-05-23
occt安卓开发
OCCT(Open Cascade Technology)是一种面向对象的三维建模软件开发平台,包含了一整套用于 CAD/CAM/CAE 等领域的开放式 3D 模型知识库。OCCT 诞生于欧洲,是法国 INRIA 研究所与欧洲高端科技领域公司的合作项目,从
2023-05-23
mtk安卓开发文档
MTK(MediaTek)芯片是安卓手机领域中非常常见的一种芯片,其开发文档主要包括以下几个方面的内容。一、MTK芯片的特点及原理介绍MTK芯片是一种智能手机应用处理器,与高通骁龙、苹果A系列芯片、三星Exynos等芯片齐名。其处理器架构采用ARMv7或A
2023-05-23
java 安卓开发用哪种框架比较好
Java安卓开发是一种非常热门的开发方式,因为安卓设备的普及率越来越高,并且很多人都喜欢使用安卓设备。在Java安卓开发中,开发人员需要使用框架来快速开发高质量的应用程序。下面我们将介绍几种流行的Java安卓开发框架。1. Android SDKAndro
2023-05-23
html开发工具安卓版
HTML是Web开发中的基础语言,常常被拿来用于网站设计和开发。在互联网技术日新月异的今天,越来越多的人使用移动设备进行网站浏览,并在其中进行访问和购买等操作。因此,HTML在移动设备上的开发也变得越来越重要。本文将介绍几款可在安卓平台上进行HTML开发的
2023-05-23
h5安卓ios开发
H5开发是指网页开发,它的原理是通过HTML、CSS和JavaScript等技术开发出网站的页面。在移动端领域,H5开发主要用于开发手机网站和APP中的嵌入式网页。H5开发有很多的优势,比如能够快速发布、易于维护和更新、成本低等。下面分别介绍H5在安卓和i
2023-05-23
e语言开发安卓
e语言是一种基于C语言的高级程序设计语言,可以进行多种不同的编程任务,包括在安卓设备上开发应用程序。使用e语言开发安卓应用程序的一个优点是可以使应用程序运行更加高效,因为e语言使用了一种非常紧凑的指令集,可以使代码运行更快。e语言开发安卓应用程序需要使用e
2023-05-23
as安卓开发菜鸟教程
Android是一个非常流行的移动操作系统,目前占据了移动设备市场的很大份额。如果你想成为一名Android应用程序员,那么你需要了解Android开发的原理和基础知识。下面是一份简要的Android开发入门指南,帮助你建立起一个坚实的基础,方便你在未来进
2023-05-23
完整的安卓app开发流程
安卓应用程序开发的一般步骤如下:1. 需求分析首先,需要进行需求分析,包括客户提供的需求,市场调查等,通过调查和分析,你可以确定应用程序的主题、目标客户和功能需求。2. 设计设计阶段,需要确定应用程序的流程,包括程序的页面布局、控件的种类和位置、用户交互方
2023-04-28
安卓应用开发记事本app实训报告
本文将介绍一种基于Android平台开发的记事本应用程序。该应用程序提供了一种简单而实用的方法来写下用户的想法、记录用户在工作、学习、生活中遇到的问题等重要信息,使得这些信息可以随时方便地被用户查找、修改和删除。应用程序包括三个核心功能:新建、编辑和删除笔
2023-04-28
安卓单机app开发选火山
火山引擎是一款专为移动端设计的跨平台游戏引擎,它支持安卓、iOS、Windows等主流移动和桌面平台。目前,火山引擎已经成为国内移动单机游戏开发的主流选择之一,其在游戏开发中的优势体现在以下几个方面:1. 超高性能火山引擎使用纯C++语言进行开发,并优化了
2023-04-28
ios和安卓兼容的app开发
要实现iOS和Android兼容的应用程序开发,最常见的方法是将应用程序编写为跨平台框架或库的基础上进行开发。这里有一些可选的技术方案,使得应用程序能够在iOS和Android上运行:1. React NativeReact Native是由Faceboo
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1