ContentProvider(内容提供器)

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

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

内容提供器的使用需要通过Content Resolver来实现,可以通过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>();

	@Override
	protected 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"/>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值