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


相关知识:
安卓11开发者选项在哪儿打开
安卓11是Google于2020年9月发布的一款移动操作系统,也是Android平台上的最新版本。对于开发者而言,包括了诸多新的开发者选项,可以更加便捷地进行开发和调试。接下来,我们就来详细介绍一下在安卓11中如何打开开发者选项,以及其对应的功能。在安卓1
2023-05-23
安卓11如何开启开发者选项
在使用 Android 手机进行开发过程中,开发者选项是非常重要的一个功能,它允许开发者在手机自身的设置中开启一些调试和开发模式,方便开发者进行调试和测试应用程序。因此在这里我们将为大家介绍在 Android 11 中如何开启开发者选项。一、打开手机的“设
2023-05-23
unity3d 安卓vr开发
Unity3D是一款强大的跨平台游戏引擎,可以用来开发PC游戏、移动游戏、虚拟现实、增强现实等不同类型的应用。而针对于安卓VR开发,Unity3D也能够轻松地实现。一、原理安卓VR开发的原理是将VR技术与Unity3D游戏引擎相结合,使得用户可以在虚拟现实
2023-05-23
qt c 可以开发安卓嘛
Qt是一种跨平台应用程序开发框架,可以用于开发多种类型的应用程序,包括桌面应用、嵌入式应用、Web应用程序、移动应用程序等。虽然Qt最开始是面向桌面应用程序开发的,但在新版本中,Qt也开始支持开发移动应用程序。同时,Qt提供了许多针对Android、iOS
2023-05-23
php开发安卓
在互联网领域,PHP是非常常见的编程语言之一,而安卓则是智能手机操作系统的代表。两者看似毫不相关,但如果我们想要在安卓上运行PHP程序,该怎么做呢?有两种方法可以在安卓上运行PHP程序。第一种方法是使用Web服务器,从而在安卓设备上搭建一个Web服务器,使
2023-05-23
js开发工具安卓
JS开发工具安卓是一款为移动设备开发者定制的跨平台开发环境,它支持多种编程语言、多种操作系统以及多种调试方式。JS开发工具安卓拥有强大的功能,能够让开发者在安卓平台上开发、测试和部署混合应用程序。本文将详细介绍JS开发工具安卓的原理和功能。一、JS开发工具
2023-05-23
e4a易安卓开发app稳定吗
e4a易安卓是一款易语言开发的安卓应用开发平台,其优点是易操作、易学习、快速构建、高效运行,特别适合初学者或对编程语言不太熟悉的人群。但是,其稳定性具体有多高,需要从以下几个方面来进行介绍。1. 开发人员的经验水平e4a易安卓虽然易于操作和学习,但是需要开
2023-05-23
c++如何开发安卓程序
C++属于一种高级的编程语言,也被认为是安卓操作系统中最重要的编程语言之一。C++可以用于开发的应用范围非常广泛,包括操作系统、虚拟机、数据库等各种领域。因为C++属于一种跨平台语言,所以在安卓操作系统中也能很好的应用。如果你想要在安卓操作系统中利用C++
2023-05-23
net5开发安卓app
在过去的几年中,.NET技术已经成为了开发者们的最爱。而与此同时,安卓设备也成为了人们最常用的智能手机系统之一。随着越来越多的人选择使用安卓设备,开发者们也开始转向了开发安卓应用程序。在过去的几年中,开发者们需要使用不同的方法才能开发安卓应用程序。如今,我
2023-05-23
我想开发安卓的app
开发安卓应用程序(App)教程安卓(Android)是谷歌(Google)开发的开源操作系统,广泛应用于便携式设备,如智能手机、平板电脑等。如今,越来越多的人们怀揣着创意、实现解决方案的愿景,致力于开发安卓应用。本教程旨在为初学者提供如何开发安卓应用程序的
2023-04-28
安卓手机怎么制作苹果app
制作苹果 App 通常需要使用苹果的官方开发工具 - Xcode,这个工具只能在 macOS 系统上运行。但如果你只有一部安卓手机,你可以采用以下几种方法来尝试制作苹果 App。方法一:使用 React Native 或 Flutter 这样的跨平台框架1
2023-04-28
安卓app小游戏开发
安卓App小游戏开发可以使用Java或Kotlin语言以及Android Studio进行开发。下面是一些常见的开发流程和原理:1. 需求分析:明确所需的功能和实现方式,并确定游戏性质和特点。2. 设计游戏逻辑:制定游戏规则和流程,建立状态机和逻辑结构。3
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1