Content Provider是什么
组件Content Provider是为了在不同应用程序之间进行数据交换的的标准API。比如,一个应用有一些数据,它可以允许别的应用来访问这些数据,那么它可以通过ContentProvider来暴露访问这些数据的接口,当别的应用想要访问这些数据时可以通过ContentResolver来操作,包括增删改查等等。
Content Provider简单使用
下面是一个简单的例子,我们可以通过ContentResolver内容解析者来访问系统里通讯录里面的联系人信息。
- 新建布局文件 layout_activity_cp.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<Button
android:id="@+id/btn_read_contact"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="读取联系人数据"/>
</LinearLayout>
- 新建Activity
public class ContentProviderActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置布局
setContentView(R.layout.layout_activity_cp);
//按钮点击事件
Button btnReadContact = (Button) findViewById(R.id.btn_read_contact);
btnReadContact.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Cursor mCursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,
null, null, null, null);
while (mCursor.moveToNext()) {
String name = mCursor.getString(mCursor.getColumnIndex
(ContactsContract.Contacts.DISPLAY_NAME));
Log.e("---contactname---", name);
}
}
});
}
}
- 清单文件 AndroidManifest.xml里添加读取联系人的权限,同时别忘了要注册Activity。
<uses-permission android:name="android.permission.READ_CONTACTS"/>
这样,运行后查看输出结果如下图所示:
QinQin---XiaoMing
Content Provider自定义
步骤
- SQLite数据库表,用于存储数据。
- 创建一个继承自ContentProvider的子类,在其中完成数据操作。
- AndroidManifest.xml文件中声明provider
- 外部访问
用法解析
- 创建数据库。这里用SQLite数据库保存数据。
- 新建继承自ContentProvider的子类,完成基本操作。
- 在清单文件里声明provider。
- 数据访问
网友评论