Android Content Provider详解及示例代码
程序员文章站
2024-03-05 21:21:19
android:content provider的使用。
1、content provider 简介
2、使用现成的content provider
3、...
android: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的内容如下:
package android.basic.lesson20; import android.app.activity; import android.content.contentresolver; import android.content.contentvalues; import android.database.cursor; import android.net.uri; import android.os.bundle; import android.provider.contactscontract; import android.view.view; import android.view.view.onclicklistener; import android.widget.button; import android.widget.toast; public class maincontentprovider extends activity { /** called when the activity is first created. */ @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); button b1 = (button) findviewbyid(r.id.button01); onclicklistener ocl = new onclicklistener() { @override public void onclick(view v) { contentresolver contentresolver = getcontentresolver(); // 获得所有的联系人 cursor cursor = contentresolver.query(contactscontract.contacts.content_uri, null, null, null, null); // 循环遍历 if (cursor.movetofirst()) { int idcolumn = cursor.getcolumnindex(contactscontract.contacts._id); int displaynamecolumn = cursor.getcolumnindex(contactscontract.contacts.display_name); do { // 获得联系人的id号 string contactid = cursor.getstring(idcolumn); // 获得联系人姓名 string displayname = cursor.getstring(displaynamecolumn); toast.maketext(maincontentprovider.this, "联系人姓名:"+displayname, toast.length_long).show(); // 查看该联系人有多少个电话号码。如果没有这返回值为0 int phonecount = cursor.getint(cursor.getcolumnindex(contactscontract.contacts.has_phone_number)); if (phonecount > 0) { // 获得联系人的电话号码列表 cursor phonescursor = getcontentresolver().query(contactscontract.commondatakinds.phone.content_uri,null, contactscontract.commondatakinds.phone.contact_id + " = " + contactid, null, null); if (phonescursor.movetofirst()) { do { // 遍历所有的电话号码 string phonenumber = phonescursor .getstring(phonescursor .getcolumnindex(contactscontract.commondatakinds.phone.number)); toast.maketext(maincontentprovider.this, "联系人电话:"+phonenumber, toast.length_long).show(); } while (phonescursor.movetonext()); } } } while (cursor.movetonext()); } } }; b1.setonclicklistener(ocl); } }
在androidmanifest.xml里添加:
<uses-permission android:name="android.permission.get_accounts" /> <uses-permission android:name="android.permission.read_contacts" />
4、实现效果图:
以上就是 android content provider的简单实例,后续继续补充相关知识,谢谢大家的支持!