一.内容提供器基本概念

  内容提供器主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访数据的安全性。详细资料请看下图:

  

二.示例代码

2.1 读取系统联系人

  其实很多时候我们用到ContentProvider并不是自己暴露自己的数据,更多的时候通过ContentResolver来读取其他应用的信息,最常用的莫过于读取系统APP,信息,联系人, 多媒体信息等!如果你想来调用这些ContentProvider就需要自行查阅相关的API资料了! 另外,不同的版本,可能对应着不同的URL!这里给出如何获取URL与对应的数据库表的字段, 这里以最常用的联系人为例。哈哈哈哈~我们还是开始动手吧!

  编写一个布局文件,读取出来的的联系人信息能够在ListView中显示,代码如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <ListView
android:id="@+id/lvContacts"
android:layout_width="match_parent"
android:layout_height="match_parent"/> </LinearLayout>

  编写一个Activity,用来读取数据,展示数据,代码如下所示:

package com.nyl.contentprovidercontacts;

import android.app.Activity;
import android.database.Cursor;
import android.provider.ContactsContract;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView; import java.util.ArrayList;
import java.util.List; public class MainActivity extends Activity { private ListView lvContacts; private ArrayAdapter<String> arrayAdapter; private List<String> contactsList = new ArrayList<>(); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lvContacts = (ListView) findViewById(R.id.lvContacts);
arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,contactsList);
lvContacts.setAdapter(arrayAdapter);
readContacts();
} /**
* 读取联系人
*/
private void readContacts() {
Cursor cursor = null;
//查询联系人数据
cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null, null,null,null);
//循环cursor中的数据
while (cursor.moveToNext()){
//获取联系人名字
String displayName = cursor.getString(cursor.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
//获取联系人手机号
String number = cursor.getString(cursor.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.NUMBER));
//将数据添加到contactsList集合
contactsList.add(displayName+"\n"+number);
}
}
}

  别忘了加读联系人的权限,代码如下:

<uses-permission android:name="android.permission.READ_CONTACTS"/>

  加入了android.permission.READ_CONTACTS的权限,程序就可以访问到系统的联系人数据,效果如下:

  

  

最新文章

  1. hdu 5071(2014鞍山现场赛B题,大模拟)
  2. alert弹层无法取消问题解决办法
  3. js中的一些容易混淆的方法!
  4. 使用charles 抓取手机上的操作
  5. Asp.net导出Excel乱码的解决方法
  6. SQL Server获取下一个编码字符实现
  7. python字典循环小点
  8. Python 判断一个字符串是否在列表中任何一个字符串中出现过
  9. Android Terminal telnet windows
  10. php与mysql的链接到底用mysql 还是mysqli,pdo
  11. 关于mysql_fetch_****
  12. 实现Android半透明Menu效果的开发实例
  13. Linux C 程序 字符串运算符-表达式(TWO)
  14. iOS触摸事件处理
  15. jqplot配置详解
  16. WndProc Message消息解释
  17. javascript基础-DOM原理
  18. 测试工作之--adb代码
  19. Volatile关键字理解
  20. easyui的tree节点的获取和选中

热门文章

  1. PHP程序中的redis一些写法
  2. JQuery扩展插件Validate—5添加自定义验证方法
  3. A - Combination Lock
  4. C++STL 求和:accumulate 【转】
  5. Tomcat注入到系统服务中,实现服务自启动及常驻
  6. HTML学习笔记(二)HTML格式化
  7. node代理网络请求
  8. bzoj 2502: 清理雪道【有上下界有源汇最小流】
  9. CF1110F Nearest Leaf
  10. Linux —— 常用命令集合