第二十讲:Content Provider 使用入门
本讲内容:Content Provider的使用。
1、Content Provider 简介
2、使用现成的Content Provider
3、定义自己的Content Provider
一、Content Provider 简介
我们说Android应用程序的四个核心组件是:Activity、Service、Broadcast Receiver 和 Content Provider。在Android中,应用程序彼此之间相互独立的,它们都运行在自己独立的虚拟机中。Content Provider 提供了程序之间共享数据的方法,一个程序可以使用Content Provider 定义一个URI,提供统一的操作接口,其他程序可以通过此URI访问指定的数据,进行数据的增、删、改、查。
二、使用现成的Content Provider
我们举一个读取Android系统通讯录提供的Content Provider为例,说明如何使用现成的Content Provider。
1、新建一个项目 Lesson20_ContentProvider项目。
2、res/layout/main.xml内容省略,就是制作一个查询按钮。
3、MainContentProvider.java的内容如下:
01 | package android.basic.lesson20; |
03 | import android.app.Activity; |
04 | import android.content.ContentResolver; |
05 | import android.content.ContentValues; |
06 | import android.database.Cursor; |
07 | import android.net.Uri; |
08 | import android.os.Bundle; |
09 | import android.provider.ContactsContract; |
10 | import android.view.View; |
11 | import android.view.View.OnClickListener; |
12 | import android.widget.Button; |
13 | import android.widget.Toast; |
15 | public class MainContentProvider extends Activity { |
17 | /** Called when the activity is first created. */ |
19 | public void onCreate(Bundle savedInstanceState) { |
20 | super .onCreate(savedInstanceState); |
21 | setContentView(R.layout.main); |
23 | Button b1 = (Button) findViewById(R.id.Button01); |
25 | OnClickListener ocl = new OnClickListener() { |
28 | public void onClick(View v) { |
29 | ContentResolver contentResolver = getContentResolver(); |
31 | Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null , null , null , null ); |
33 | if (cursor.moveToFirst()) { |
35 | int idColumn = cursor.getColumnIndex(ContactsContract.Contacts._ID); |
37 | int displayNameColumn = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); |
41 | String contactId = cursor.getString(idColumn); |
44 | String disPlayName = cursor.getString(displayNameColumn); |
46 | Toast.makeText(MainContentProvider. this , "联系人姓名:" +disPlayName, |
47 | Toast.LENGTH_LONG).show(); |
50 | int phoneCount = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); |
55 | Cursor phonesCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null , |
56 | ContactsContract.CommonDataKinds.Phone.CONTACT_ID |
57 | + " = " + contactId, null , null ); |
59 | if (phonesCursor.moveToFirst()) { |
62 | String phoneNumber = phonesCursor |
63 | .getString(phonesCursor |
64 | .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); |
65 | Toast.makeText(MainContentProvider. this , "联系人电话:" +phoneNumber, |
66 | Toast.LENGTH_LONG).show(); |
67 | } while (phonesCursor.moveToNext()); |
71 | } while (cursor.moveToNext()); |
76 | b1.setOnClickListener(ocl); |
4、运行程序,查看结果
系统通讯录中的联系人信息
我们的程序读取出来的联系人信息