*读取联系人

StringBuilder sb = new StringBuilder();
// 1:得到中间人。
ContentResolver resolver = getContentResolver();
// 2:地址。
// contacts;com.android.contacts:表示2个都可以
String raw_contact_host = "content://com.android.contacts/raw_contacts";
String data_host = "content://com.android.contacts/data";
Uri uri = Uri.parse(raw_contact_host);
Uri data_uri = Uri.parse(data_host);
// 3:查询数据。
Cursor cursor = resolver.query(uri, new String[] { "_id", "display_name" }, null, null, null);
while (cursor.moveToNext()) {
// contact_id
int id = cursor.getInt(cursor.getColumnIndex("_id"));
// ContentResolver resolver2 = getContentResolver();
Cursor data_cursor = resolver.query(data_uri, null, "raw_contact_id=?", new String[] { id + "" }, null)
while (data_cursor.moveToNext()) {
String mimytype = data_cursor.getString(data_cursor.getColumnIndex("mimetype"));
String data = data_cursor.getString(data_cursor.getColumnIndex("data1")); if (mimytype.equals("vnd.android.cursor.item/phone_v2")) {
// 电话号码
sb.append("电话号码:" + data);
} else if (mimytype.equals("vnd.android.cursor.item/name")) {
sb.append("名字:" + data);
} else if (mimytype.equals("vnd.android.cursor.item/organization")) {
sb.append("组织:" + data);
}
}
// data_cursor.close();
String display_name = cursor.getString(cursor.getColumnIndex("display_name"));
sb.append("姓名:" + display_name);
}
cursor.close();
return sb.toString();

*读取短信

resolver = getContentResolver();
add = "content://sms/";
uri = Uri.parse(add);
// 1:得到中间人。
// 2:知道地址。
// 查询所有的短信。
// address:表示发短信的号码,date;发送的日期.body:发送的内容:这些都需要查看表才知道,不需要记忆。
Cursor cursor = resolver.query(uri, new String[] { "address", "date", "body" }, null, null, null);
while (cursor.moveToNext()) {
String address = cursor.getString(cursor.getColumnIndex("address"));
String body = cursor.getString(cursor.getColumnIndex("body"));
int date = cursor.getInt(cursor.getColumnIndex("date"));
System.out.println(address + "--" + body + "----" + date);
}
cursor.close();

*内容提供者

/*
* authorities ;主机名。
* 1:创建一些地址。
* http://www.sina.com/index.html
* 访问别人的数据。
* content://主机名/
* content://com.qf.day15_sqlitedemo1.person/person ------1
*/
public class PersonContentProvider extends ContentProvider {
private static UriMatcher match;
private static final String AUTHORITIES = "com.qf.day15_sqlitedemo1.person";
private PersonSqliteOpenHelper helper;
private SQLiteDatabase db;
static{
//创建匹配器。
match = new UriMatcher(UriMatcher.NO_MATCH);//当不匹配的时候就返回-1
//http://www.sina.com/
//content://com.qf.day15_sqlitedemo1.person/person
match.addURI(AUTHORITIES, "person", 1);//表示查询person里面的所有数据。
match.addURI(AUTHORITIES, "person_id/#", 2);//表示查询person表中的id号为固定值的数据。
match.addURI(AUTHORITIES, "person_name/*", 3);
}
//内容提供者创建的时候调用。
@Override
public boolean onCreate() {
helper = new PersonSqliteOpenHelper(getContext());
db = helper.getWritableDatabase();
return true;
} //查询
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
Cursor cursor = null;
//将别的应用的地址跟我们自己定义的地址进行匹配。
int code = match.match(uri);
System.out.println(code);
//对值进行判断。
if(code==1){
cursor = db.query("person", projection, selection, selectionArgs, null, null, null);
}else if(code==2){
//获得id号
int id =Integer.parseInt( uri.getLastPathSegment());
cursor = db.query("person", projection, "_id=?", new String[]{id+""}, null, null, null);
}
return cursor;
}
//返回类型--一般不用
@Override
public String getType(Uri uri) {
return null;
}
//插入数据
@Override
public Uri insert(Uri uri, ContentValues values) {
return null;
}
//删除数据
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
return 0;
}
//更新数据
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
return 0;
} }

注:记得配置读写短信和读写联系人的权限

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

内容提供者Content Provider的更多相关文章

  1. 内容提供者(Content Provider)——跨程序共享数据

    内容提供者 Content Provider 应用的数据库是不允许其他应用访问的 内容提供者的作用就是让别的应用访问到你的数据库 自定义内容提供者,继承ContentProvider类,重写增删改查方 ...

  2. Android开发-API指南-Content Provider基础

    Content Provider Basics 英文原文:http://developer.android.com/guide/topics/providers/content-provider-ba ...

  3. Android内容提供者(Content provider)

    使用ContentProvider共享数据 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据,但数据访 ...

  4. 内容提供器(Content Provider)

    一个跟数据库很相似的用于与其他程序传递信息的组件,用的也是数据库的CRUD操作 相关权限 注册内容提供者以及权限 <provider android:name=".ContentRes ...

  5. Android 内容提供器(Content Provider)介绍

    内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性.目前,使用内容 ...

  6. 【Android Developers Training】 94. 创建一个空内容提供器(Content Provider)

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  7. android学习十二(android的Content Provider(内容提供器)的使用)

    文件存储和SharePreference存储以及数据存储一般为了安全,最好用于当前应用程序中訪问和存储数据.内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能 ...

  8. Android学习之基础知识十—内容提供器(Content Provider)

    一.跨程序共享数据——内容提供器简介 内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能 ...

  9. android笔记 : Content provider内容提供器

    内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能. 内容提供器的用法一般有两种,一种是使用现有的内容提供器来读取和操作相应程序中的数据,另一种是创建自己的内 ...

随机推荐

  1. linux 下如何给用户添加权限

    linux 添加用户.权限:# useradd –d /usr/sam -m sam此命令创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录/usr/sam(/usr为默认的用户 ...

  2. c++强制类型转换:dynamic_cast、const_cast 、static_cast、reinterpret_cast

    c++强制类型转换:dynamic_cast.const_cast .static_cast.reinterpret_cast 博客分类: C/C++ CC++C#编程数据结构  dynamic_ca ...

  3. Ubuntu 16.04 下安装Firefox的Flash插件

    在ubuntu系统环境下面打开优酷视频,发现无法播放视频.Adobe Flash Player 是一款轻量级浏览器插件,具有丰富的 Internet 应用运行时间,提供持续的迷人用户体验.绝妙的音频/ ...

  4. [Educational Codeforces Round 16]E. Generate a String

    [Educational Codeforces Round 16]E. Generate a String 试题描述 zscoder wants to generate an input file f ...

  5. 从零开始写一个武侠冒险游戏-8-用GPU提升性能(3)

    从零开始写一个武侠冒险游戏-8-用GPU提升性能(3) ----解决因绘制雷达图导致的帧速下降问题 作者:FreeBlues 修订记录 2016.06.23 初稿完成. 2016.08.07 增加对 ...

  6. SQL注入--宽字节注入

    PHP测试代码: <?php // 面向对象写法 $id=addslashes($_GET[‘id’]); //获取id并转义预定义字符 // /$id=$_GET[‘id’]; $mysqli ...

  7. zookeeper 用法和日常运维

    本文以ZooKeeper3.4.3版本的官方指南为基础:http://zookeeper.apache.org/doc/r3.4.3/zookeeperAdmin.html,补充一些作者运维实践中的要 ...

  8. [ruby on rails] 跟我学之(8)修改数据

    修改views 修改index视图(app/views/posts/index.html.erb),添加编辑链接,如下: <h1>Our blogs</h1> <% @p ...

  9. 组合数学or not ---- n选k有重

    模板问题: 1. 取物品 (comb.pas/c/cpp) [问题描述] 现在有n个物品(有可能相同),请您编程计算从中取k个有多少种不同的取法.[输入] 输入文件有两行,第一行包含两个整数n,k(2 ...

  10. Maximum Product of Word Lengths

    Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the tw ...