安卓获取通讯录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来实现。


相关知识:
安卓2d开发教程
安卓2d开发指的是在安卓平台上开发2维图形应用程序的过程,它能够让开发者轻松构建一些简单的图形应用,如游戏、动画、商业图表等等。下面我们将介绍安卓2d开发的原理和详细内容。1、原理介绍安卓2d开发的原理可以分为两个方面:视图(View)和画布(Canvas
2023-05-23
vim开发安卓
Vim是一款非常强大的文本编辑器,被广泛用于各种编程任务。然而,很少有人知道 Vim 实际上也可以用于开发 Android 应用程序。Android 应用程序通常是使用 Java 编写的,然而您可能不知道的是,Java 编译器可以使用 Vim 作为前端编辑
2023-05-23
s安卓10开发者预览版又更新啦
安卓10开发者预览版已经更新至第三个版本(Beta 3),这个版本新增了一系列功能,还修复了一些问题,下面我们来看一下具体情况。Beta3新增功能1. 系统底层优化这是一个非常重要的改进,安卓10加强了应用与系统之间的交互,提升了设备的稳定性和性能表现。2
2023-05-23
kotlin开发的安卓运行速度
Kotlin是一种现代、静态类型的编程语言,由JetBrains公司开发。它可以编写Java虚拟机(JVM)上的应用程序,同时也可以编写原生应用程序,比如安卓应用程序。尽管Kotlin是一门相对较新的编程语言,但是它已经迅速地成为了安卓开发中最受欢迎的语言
2023-05-23
bat大型安卓项目开发之旅
BAT是中国互联网三大巨头的缩写,分别是百度、阿里巴巴、腾讯。这三个公司拥有庞大的用户群体和海量的数据资源,因此他们的APP吸引了大量的用户,同时也面临着巨大的技术挑战。在安卓应用开发领域,BAT三家公司都有着非常重要的地位,他们的APP覆盖了各种领域,包
2023-05-23
app开发安卓和苹果
移动应用程序(Mobile Apps)是为移动设备而设计的应用程序。可以分为两种类型:Native App(原生应用程序)和Web App(网络应用程序)。Native App是为特定平台(如iOS或Android)而设计开发的应用程序,开发者需了解相应平
2023-05-23
用安卓模拟器开发app
**标题:使用安卓模拟器进行APP开发:原理和详细步骤介绍****简介**: 本篇文章将向您讲述如何通过安卓模拟器进行APP开发,详细介绍安卓模拟器的原理及开发相关的基本概念,并引导入门级开发者进行相关实践操作。**目录:** 1. 安卓模拟器简介2. 安
2023-04-28
用c+开发安卓app
使用C++来开发安卓App的方法可以概括为:将C++代码编译为动态链接库(Dynamic Link Library,DLL),然后通过JNI(Java Native Interface)调用该DLL。下面将详细介绍这一过程。一、编写C++代码首先需要编写C
2023-04-28
广州安卓app软件开发公司排名
广州是中国的IT技术产业中心之一,有着许多优秀的app软件开发公司。下面是一些可以帮助排名的因素:1. 团队规模:团队规模通常是评估一家公司实力的重要指标之一。规模较大的公司通常可以提供更多的资源,以及更高水平的技术支持和服务。2. 技术实力:能够提供高质
2023-04-28
安卓app开发者选项有什么用
安卓开发者选项是一个专门为开发人员提供的功能集合,可以在开发应用程序时帮助开发者诊断和调试问题。以下是开发者选项的一些主要用途和原理:1. USB 调试通过开启 USB 调试,可以将 Android 设备连接到计算机,并使用 Android Debug B
2023-04-28
基于安卓的app开发案例
在本篇文章中,我们将介绍一个基于安卓的App开发案例——天气查询应用。我们会通过实例,逐步详细介绍开发流程以便您能够深入理解。项目需求:用户输入一个城市名称,应用程序将该城市的当前天气和未来几天的天气预报展示出来。为实现这个目标,我们将使用开放天气API获
2023-04-28
基于安卓的app开发协议部分怎么改
在本文中,我们将解释如何修改基于安卓的App开发协议部分。我们将先简要介绍相关原理,然后提供一个详细的教程,以帮助您熟练地进行操作。原理介绍:在Android App开发中,协议主要分为两大类:通信协议和数据交换协议。通信协议负责在客户端(App)和服务器
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1