ContentProvider(内容提供器)

来源:互联网 发布:网络交友 成功率高 编辑:程序博客网 时间:2024/04/27 06:47

关于持久化技术我们也差不多都谈过了,然而我们发现这些数据只能在当前的程序实现共享,如果我们想获取其他程序的数据呢?

这时我们就要使用到ContentProvider来实现跨程序数据共享的功能了,使用它我们就可以获取系统的电话簿、短信、媒体库等程序的内容。

内容提供器的使用需要通过ContentResolver来实现,可以通过Context中的getContentResolver()方法获取实例,该类提供一系列的CRUD操作,就SQLite相似。不同的是,ContentResolver中的增删改查都是不接收表名参数的,而是使用一个Uri参数代替,该参数为称为内容URI,有权限以及路径组成,一般权限都是使用程序的包名,路径俄日表名。这样就能很好的区分不同程序不同的表格了。
下面是一个获取手机联系人名称及联系人号码的实例:

package com.example.contactstast;import java.util.ArrayList;import java.util.List;import android.net.Uri;import android.os.Bundle;import android.provider.ContactsContract;import android.widget.ArrayAdapter;import android.widget.ListView;import android.app.Activity;import android.database.Cursor;public class MainActivity extends Activity {ListView contanctsView;ArrayAdapter<String> adapter;List<String> contactList = new ArrayList<String>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);contanctsView = (ListView) findViewById(R.id.contacts_view);adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,contactList);contanctsView.setAdapter(adapter);readContacts();}private void readContacts() {Cursor cursor = null;try {//查询联系人数据//ContactsContract已经将Uri做好了封装,所以不需要调用Uri.parse()方法去解析URI字符串Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;cursor = getContentResolver().query(uri, null, null, null, null);while (cursor.moveToNext()) {//获取联系人姓名int columnIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);String displayName = cursor.getString(columnIndex);//获取联系人手机号码int columnIndex2 = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);String number = cursor.getString(columnIndex2);contactList.add(displayName+"\n"+number);}} catch (Exception e) {e.printStackTrace();}}}

当然,要记得添加权限:

<uses-permission android:name="android.permission.READ_CONTACTS"/>




0 0
原创粉丝点击