android四大组件之ContentProvide

在应用程序中很多内容是共享的(可以被多个程序访问),如系统的电话本程序,短信,媒体库等程序都实现了数据的共享,当然其使用的就是内容提供器

ContentProvider :主要用于在不同的应用程序之间实现数据共享的功能,允许一个程序访问另一个程序中的数据,同时还能保证数据的安全性,其可以选择对那一部分数据进行共共享,从而保证隐私数据不会泄露。

内容提供器一般有两种用法:

1:使用现有的内容提供器来读取和操作相应程序中的数据,

2:创建自己的内容提供器给我们程序的数据提供外部访问接口。

访问其程序中的数据:

对于每一个引用程序来说,如果想要访问内容提供器中的数据,就一定得借助于ContentResolve类,可以通过Context中的getContentResolve()方法获取该类的实例,ContentResolve提供了对数据进行(增删查改)的方法。不同于SQLiteDatabase , ContentResolve中的增删查改方法都不接受表明参数,而是使用一个Uri参数代替,这个参数被称为内容uri ,内容uri给内容提供器中的数据建立了唯一标识。内容uri可以清楚的表示出我们想要访问那个程序中那张表了的数据。

在得到内容uri字符串后,我们还需要将其解析成uri对象,才可作为参数传入,解析方法非常简单,只需调用uRi.parse()方法,就可以将uri字符串解析成uRi对象。

通过ContentResolve获取手机联系人的姓名,及联系方式

1:在布局文件中添加一个ListView,将读出来的信息展示在ListView

 

        android1:id="@+id/list_pnum"

        android1:layout_width="match_parent"

        android1:layout_height="wrap_content"

        android1:layout_weight="1" >

    

MainActivity.java中完成具体业务处理如下:

public class MainActivity extends Activity {

private ListView list = null;

List contantList = new ArrayList();

ArrayAdapter adapter;

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

list = (ListView) findViewById(R.id.list_pnum);

adapter = new ArrayAdapter(this,

android.R.layout.simple_list_item_1, contantList);

list.setAdapter(adapter);

readCountacts();

}

 

private void readCountacts() {

Cursor cursor = null;

try {

cursor = getContentResolver().query(

 

ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,

null, null);

while (cursor.moveToNext()) {

// 获取姓名

String name = cursor

.getString(cursor

.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));

// 获取电话

String number = cursor

.getString(cursor

.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

contantList.add(name + "\n" + number);

 

}

} catch (Exception e) {

e.printStackTrace();

} finally {

if (cursor != null) {

cursor.close();

}

}

}

}

最后,因为读取联系人是要权限的因此在清单文件中添加权限:

然后运行在模拟器上即可

当然首得保证你的通讯录是不为空的,否则将读取空白信息。

 android四大组件之ContentProvide_第1张图片

你可能感兴趣的:(android)