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


相关知识:
安卓app 开发浏览器
安卓app开发浏览器,是指开发一款可以在安卓系统上运行的浏览器应用程序。在现代人的生活中,浏览器是必不可少的一项软件,人们可以通过浏览器上网、查找信息等。这使得浏览器成为了手机app开发中一个非常重要的部分。下面将介绍一下安卓app开发浏览器的原理和详细过
2023-05-23
安卓9
安卓9.0是安卓最新的操作系统版本,也被称为Android Pie。它于2018年8月首次发布,引入了一系列新功能和改进。下面我们将详细介绍安卓9.0的开发者内容。1. 应用程序传输协议安卓9.0引入了一个新的应用程序传输协议(App Transport
2023-05-23
安卓10开发模式密码
Android 10中引入了一种新的安全功能——开发人员模式密码。该密码可以保护开发人员模式的隐私信息,例如USB调试、布局查看器和严格模式等。开发人员模式密码的原理是在设备中保存一组密码或 PIN 码,用于保护开发人员模式设置。该密码只需要在首次启用开发
2023-05-23
java安卓客户端开发
Java安卓客户端开发是指基于Java语言的安卓移动应用的开发。安卓移动应用是一种基于安卓平台的手机软件应用,具有功能强大、界面友好等特点,得到了广泛应用。本文将介绍Java安卓客户端开发的相关原理和技术。1. 安卓应用程序架构安卓应用程序架构被分为四个主
2023-05-23
app开发安卓和苹果
移动应用程序(Mobile Apps)是为移动设备而设计的应用程序。可以分为两种类型:Native App(原生应用程序)和Web App(网络应用程序)。Native App是为特定平台(如iOS或Android)而设计开发的应用程序,开发者需了解相应平
2023-05-23
安徽安卓app开发公司哪家好
安卓APP开发是现今移动互联网时代的核心技术之一。安徽地区的APP开发公司很多,但具体哪家好需要根据实际情况来看。一般来说,选择一个好的安卓APP开发公司需要考虑以下几个方面:1. 团队实力:选择一个能够提供全方位APP开发服务的公司,需要看公司的团队实力
2023-04-28
安卓开发工具app
安卓开发工具是用于开发安卓应用程序的应用程序。它们包括一系列开发工具,例如编译器、调试器、模拟器和IDE等。在以下,我将介绍一些常用的安卓开发工具:1. Android Studio: Android Studio是最流行的安卓开发工具之一。它是由谷歌公司
2023-04-28
安卓即时通讯app开发
在这篇文章中,我们将介绍安卓即时通讯App的开发原理及相关技术。我们将深入讨论实时通讯协议、开发流程和基础功能等方面,帮助您入门安卓即时通讯App的开发。一、通讯协议选择通讯协议是即时通讯App的基础。在开发之前,首先要选择一个稳定、高效的通讯协议。这里我
2023-04-28
安卓app开发基于什么技术
Android应用开发是基于谷歌所推出的Android移动操作系统进行的应用程序开发。Android操作系统主要是基于Linux内核,采用Java、Kotlin等编程语言进行开发。以下是Android应用开发的主要技术和原理详细介绍:1. 开发语言:a.
2023-04-28
安卓app修改后打包
安卓app的修改和打包通常有两种方式:1. 反编译 + 修改 + 编译打包这种方式需要用到反编译工具,如apktool、dex2jar等,将原始的apk反编译成smali语言或Java源代码,进行修改后再编译成dex格式,再使用apktool等工具打包成a
2023-04-28
安卓app 开发进销存
在本篇文章中,我们将详细介绍安卓app开发进销存(即库存管理系统)的基本原理和关键组件。库存管理系统对于零售商、批发商和其他具有库存管理需求的企业至关重要。进销存系统通常涉及库存控制、进货管理、销售跟踪以及报表功能等功能。在安卓应用开发环境中,我们可以通过
2023-04-28
吉林安卓app开发哪家好
吉林地区有很多优秀的安卓APP开发公司,以下是其中几家比较出色的公司。1. 吉吉动力吉吉动力是一家专注于移动互联网、智能硬件的创新型企业。其在APP开发方面有着丰富的经验和创意。通过对用户需求的研究和把握,吉吉动力不断更新和升级自己的技术,为客户提供具有创
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1