Android 中的内容提供器示例

androidmobile developmentapps/applications更新于 2026/2/6 21:37:17

什么是 Android 中的内容提供器?

Android 中的内容提供器是 Android 操作系统的一个组件,它使应用程序能够存储数据并与其他应用程序共享数据。内容提供器在应用程序与 Android 数据源(例如数据库、文件和 SharedPreferences)之间提供接口。内容提供器是 Android 应用程序开发的四大基本组件之一,另外三个是 Activity、服务和广播接收器。需要访问其他应用程序数据的应用程序会使用内容提供器。

内容提供器通常用于在存储介质中存储和检索数据。该存储介质可以是数据库、文件或共享首选项。内容提供器还可以用于与其他应用程序共享数据,从而允许应用程序进行通信和传输数据。内容提供程序对于从远程源(例如 Web 服务器)存储和检索数据特别有用。

内容提供程序是通过扩展 ContentProvider 类并定义标识内容提供程序的 URI(统一资源标识符)来创建的。然后,此 URI 用于访问来自内容提供程序的数据。通常使用 ContentResolver 类访问内容提供程序。ContentResolver 类提供查询和操作内容提供程序提供的数据的方法。

内容提供程序用于存储和检索联系人、图像、视频、音乐和其他媒体数据。例如,Android 通讯录应用程序使用内容提供程序来存储和检索联系人数据。通讯录应用程序提供了一个内容提供程序,其他应用程序可以使用它来访问联系人数据。类似地,Android 媒体商店应用程序使用内容提供程序来存储和检索媒体文件。

在本文中,我们将构建一个简单的应用程序,该应用程序将从设备联系人应用程序中获取数据,并以列表视图的形式在我们的 Android 应用程序中显示这些数据。在此应用程序中,我们使用联系人应用程序的内容在我们的应用程序中显示。

Android 中内容提供程序的实现

我们将创建一个简单的应用程序,在其中显示一个列表视图。在这个列表视图中,我们将显示不同的编程语言,并为列表视图中的项目添加点击监听器。点击列表视图中的项目时,我们将向用户显示一条包含项目名称的 Toast 消息。我们将按照分步指南在 Android 中实现两个数字的加法。

步骤 1 - 在 Android Studio 中创建新项目

导航到 Android Studio,如下图所示。在下面的屏幕中,点击"新建项目"以创建一个新的 Android Studio 项目。

点击"新建项目"后,您将看到以下屏幕。

在此屏幕中,我们只需选择"空活动"并点击"下一步"。点击"下一步"后,您将看到以下屏幕。

在此屏幕中,我们只需指定项目名称。然后,软件包名称将自动生成。

注意 - 确保选择 Java 作为语言。

指定所有详细信息后,点击"完成"以创建一个新的 Android Studio 项目。

项目创建完成后,我们将看到两个打开的文件,即 activity_main.xml 和 MainActivity.java 文件。

步骤 3 - 使用 activity_main.xml。

导航到 activity_main.xml。如果此文件不可见,请打开此文件。在左侧窗格中,导航至 app>res>layout>activity_main.xml 以打开此文件。打开此文件后,将以下代码添加到其中。代码中添加了注释,以便您详细了解。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:id="@+id/idRLLayout"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical"
   tools:context=".MainActivity">
   <!--Creating a list view on below line-->
   <ListView
      android:id="@+id/listView"
      android:layout_width="match_parent"
      android:layout_height="match_parent" />
</RelativeLayout>

说明 - 在上面的代码中,我们创建了一个相对布局作为根布局,并在其中创建了列表视图小部件来显示编程语言列表。对于列表视图小部件,我们将高度和宽度指定为 match_parent。并为其添加了一个唯一的 ID,我们将使用该 ID 来设置列表视图中的数据。

步骤 4:为列表视图的项目创建自定义布局文件

导航至 app>res>右键单击它>New>Layout Resource file,将其命名为 contacts_list_item,并向其中添加以下代码。代码中添加了注释,以便您详细了解。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:layout_margin="3dp"
   android:orientation="vertical">

   <!-- on below line creating a text view for contact name-->
   <TextView
      android:id="@+id/idTVContactName"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:padding="4dp"
      android:text="Contact Name"
      android:textColor="@color/black"
      android:textSize="18sp"
      android:textStyle="bold" />

   <!-- on below line creating a text view for contact number -->
   <TextView
      android:id="@+id/idTVContactNumber"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:padding="4dp"
      android:text="Number"
      android:textColor="@color/black"
      android:textSize="16sp" /

</LinearLayout>

说明 - 在上面的代码中,我们创建了一个相对布局作为父布局。在这个布局中,我们创建了两个文本视图。一个文本视图用于显示联系人的姓名,另一个文本视图用于在列表视图中显示该联系人的联系电话。

步骤 5:使用 MainActivity.java 文件。

导航到 MainActivity.java。如果此文件不可见,请在左侧窗格中导航至 app>res>layout>MainActivity.java 以打开此文件。打开此文件后,将以下代码添加到其中。代码中添加了注释,以便您详细了解。

package com.example.androidjavaapp;

import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

   // 在下面一行中为列表视图创建一个变量。
   private ListView contactsLV;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        // 下面一行初始化变量。
        contactsLV = findViewById(R.id.listView);
        
        // 创建游标并在下面一行查询数据
        Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
        
        // 下面一行调用方法来管理游标。
        startManagingCursor(cursor);
        
        // 下面一行从联系人中获取数据
        String[] data = {ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone._ID};
        
        // 下面一行指定我们需要设置数据的 id。
        int[] to = {R.id.idTVContactNumber, R.id.idTVContactName};
        
        // 下面一行创建并初始化简单的游标适配器,并传递我们需要显示的布局文件。
        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.contacts_list_item, cursor, data, to);
        
        // 下面一行将适配器设置为列表视图。
        contactsLV.setAdapter(adapter);
        
        // 下面一行设置列表视图的选择模式。
        contactsLV.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
   }

}

说明 - 在上面的代码中,我们首先为 listview 创建变量。在 onCreate 方法中,我们使用在 activity_main.xml 文件中提供的 id 初始化 listview 变量。之后,我们创建并初始化游标的变量,然后通过调用开始管理游标方法设置游标的管理器。之后,我们创建一个字符串数组来获取联系人电话号码和联系人姓名。然后,我们创建一个整数数组,在其中指定要设置数据的文本视图的 id。然后,我们创建并初始化适配器,并将数据传递给它。最后,我们将适配器设置为列表视图。

添加上述代码后,只需点击顶部栏中的绿色图标即可在移动设备上运行我们的应用程序。

注意 - 确保您已连接到真实设备或模拟器。

输出

结论

在以上教程中,我们了解了 Android 中的内容提供器 (Content Provider) 是什么,以及如何以不同的方式使用它们在我们的应用程序中获取来自其他应用程序的数据。我们还构建了一个联系人解析器 (Contact Parser) 应用程序,它将从我们设备的联系人应用程序中读取所有联系人。


相关文章