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


相关知识:
安卓3d开发工具
安卓3D开发是指在安卓平台上进行3D游戏或应用的开发,需要使用专门的工具和技术。下面将介绍几种常用的安卓3D开发工具及其原理。1. Unity:Unity是目前最受欢迎的3D游戏引擎之一,它可以跨平台开发各种类型的3D游戏或应用。Unity支持C#脚本编程
2023-05-23
vs开发安卓app c++
VS开发安卓App C++(原理或详细介绍)Visual Studio是微软公司开发的一个集成开发环境(IDE),是开发Windows操作系统平台应用程序的首选开发工具之一。Visual Studio集成了多种编程语言,包括C++、C#、Visual Ba
2023-05-23
java开发安卓开发
Java是一种非常流行的编程语言,也是安卓开发中最基础的编程语言。在本文中,我们将为您介绍Java开发安卓应用程序的原理和详细介绍。1. Java Android开发的原理Java Android开发是采用Java语言和Android开发工具(如Andro
2023-05-23
headfirst安卓开发教程pdf
《Head First安卓开发》是一本非常全面的安卓开发入门教程。这本书的特点在于采用了非常直观的讲解方式,通过生动、有趣的图表、漫画和实例来展现安卓应用开发中的概念和技术。本书全面讲解了安卓开发所需要的基础知识、工具、框架及其实现原理和应用场景。其中包含
2023-05-23
as开发安卓用到数据库
Android应用程序开发使用SQLite数据库是非常常见的,因为它是一个轻量级的关系型数据库管理系统,可以被集成到Android应用程序中,扮演数据存储的角色,帮助Android应用程序存储和管理数据。SQLite是一个嵌入式SQL数据库管理系统,与其他
2023-05-23
5年的安卓开发值多少
作为一名五年的安卓开发者,您的价值受到多种因素的影响,包括技能水平、项目经验、所在地区、公司规模和行业需求等等。以下是您在安卓开发领域可以期望的薪资水平和职业发展情况的一些详细介绍。1. 技能水平作为一名经验丰富的安卓开发者,您应该已经掌握了很多技能和经验
2023-05-23
校园安卓app开发思维图
校园安卓app开发思维图详细介绍创建一个校园app需要考虑很多方面,从设计、开发到功能实现和用户体验。在开发之前,拟定一个清晰的思维图可以让整个过程更加顺畅和有效。以下是一种校园安卓App开发的思维图:1. 目标分析 a. 确定目标用户(学生、教师、
2023-04-28
开发安卓app的方法和技巧
开发安卓应用的方法和技巧开发安卓应用程序的过程涉及许多方法和技巧,无论您是初学者还是有经验的开发者,都可以通过掌握以下原理和技巧,提高您的开发效率和应用质量。1. 了解安卓开发基本原理首先,熟悉安卓操作系统的基本原理和架构是非常重要的。安卓系统基于Linu
2023-04-28
安卓开发外卖饿了么app
在这篇教程中,我们将进一步讲解一个外卖应用(如饿了么)的开发原理和详细介绍。在进行开发之前,你需要具备基础的安卓应用开发知识,如Java或Kotlin编程语言、Android Studio等。首先,让我们理解一个外卖应用的基本功能和组件:1. 用户账户系统
2023-04-28
安卓app开发参考文献英文
1. "Android Programming: The Big Nerd Ranch Guide" by Bill Phillips, Chris Stewart, and Kristin Marsicano. This highly-rated boo
2023-04-28
安卓app封装教程
安卓App封装是指将Web、HTML、JavaScript、CSS等前端技术与原生安卓应用程序结合起来,打包成一个具有独立功能的应用程序的过程。具体的步骤如下:1.准备工作:安装好需要用到的工具,例如:Android SDK、Java SDK等。2.创建项
2023-04-28
app打包封装苹果安卓应用
应用打包封装是将应用程序封装为软件包以方便发布、安装的过程。在移动应用开发中,应用打包封装是将应用程序打包成IPA或APK格式发布到苹果或安卓应用商店的过程。以下是应用打包封装的原理和详细介绍:1. 原理应用打包封装的原理是将应用程序的源代码、资源文件、库
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1