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
- ContentProvider ---内容提供器
- ContentProvider内容提供器
- ContentProvider(内容提供器)
- ContentProvider 内容提供器
- Android 内容提供器 ContentProvider
- ContentProvider--------详解内容提供器
- 跨程序内容提供器ContentProvider
- 创建自己的内容提供器ContentProvider
- ContentProvider内容提供器学习笔记
- Android 组件ContentProvider(一)内容提供器
- [Android四大组件] ContentProvider 内容提供器
- Android内容提供器——ContentProvider
- 访问内容提供器(ContentProvider)提供的数据
- Android ContentProvider(内容提供器运用一)
- Android之内容提供器ContentProvider的简单表示
- Android之ContentProvider(一):内容提供器的用法
- Android 内容提供器---创建内容提供器(实现ContentProvider类)
- Android 内容提供器---创建内容提供器(实现ContentProvider的MIME类型)
- 解决windows+python+opencv无法读取视频的问题
- 使用FFmpeg库实现视频编码
- [设计模式之禅笔记] 2. 里氏替换原则
- 【华为OJ7】取近似值
- C语言输入输出格式控制
- ContentProvider(内容提供器)
- Switch语句的参数是什么类型的?
- 高手之路——Po学校学习笔记-第六课
- 深度学习卷积神经网络大事件一览
- 173.Insertion Sort List-链表插入排序(容易题)
- 又回到了最初的起点
- java.lang.UnsatisfiedLinkError: E:\Tomcat\tomcat7.1\bin\tcnative-1.dll: Can't load AMD 64-bit .dll o
- matlab if&&for&&switch语句
- linux系统中启动MYSQL时出现错误:touch: 无法创建"/var/lock/subsys/mysql": 设备上没有空间