内容提供者Content Provider
*读取联系人
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的更多相关文章
- 内容提供者(Content Provider)——跨程序共享数据
内容提供者 Content Provider 应用的数据库是不允许其他应用访问的 内容提供者的作用就是让别的应用访问到你的数据库 自定义内容提供者,继承ContentProvider类,重写增删改查方 ...
- Android开发-API指南-Content Provider基础
Content Provider Basics 英文原文:http://developer.android.com/guide/topics/providers/content-provider-ba ...
- Android内容提供者(Content provider)
使用ContentProvider共享数据 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据,但数据访 ...
- 内容提供器(Content Provider)
一个跟数据库很相似的用于与其他程序传递信息的组件,用的也是数据库的CRUD操作 相关权限 注册内容提供者以及权限 <provider android:name=".ContentRes ...
- Android 内容提供器(Content Provider)介绍
内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性.目前,使用内容 ...
- 【Android Developers Training】 94. 创建一个空内容提供器(Content Provider)
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- android学习十二(android的Content Provider(内容提供器)的使用)
文件存储和SharePreference存储以及数据存储一般为了安全,最好用于当前应用程序中訪问和存储数据.内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能 ...
- Android学习之基础知识十—内容提供器(Content Provider)
一.跨程序共享数据——内容提供器简介 内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能 ...
- android笔记 : Content provider内容提供器
内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能. 内容提供器的用法一般有两种,一种是使用现有的内容提供器来读取和操作相应程序中的数据,另一种是创建自己的内 ...
随机推荐
- 不使用配置文件动态注册HttpModule
在asp.net 4.0中,提供了一种不通过修改配置文件注册Module的方法.从.net3.5开始,新提供的PreApplicationStartMethodAttribute特性可以应用在程序集上 ...
- Web基础架构:负载均衡和LVS
在大规模互联网应用中,负载均衡设备是必不可少的一个节点,源于互联网应用的高并发和大流量的冲击压力,我们通常会在服务端部署多个无状态的应用服务器和若干有状态的存储服务器(数据库.缓存等等). 一.负载均 ...
- Linux系统日志及日志分析
Linux系统日志及日志分析 Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息. 大部分Linux发行版默认的日志守护进程为 syslog,位 ...
- CentOS6.5安装iftop
iftop这个小工具是Linux和unix下的top命令升级版,功能相对较强,界面易懂.今天安装了CentOS6.5的最新版,装个小工具检查下系统运行性能. 官网:http://www.ex-parr ...
- [转] Android开发者必备的42个链接
下面收集了42个帮助大家学习Android的内容链接,部分内容是面向初学者的,帮助大家从头开始学习Android开发,其他则面向较高级的开发者.希望推荐的这些内容对你有帮助. 官方网站 1.谷歌And ...
- Telnet是什么?
Telnet协议是 用途一: 测试端口号 例子:测试本机的80端口是否打开 1.获得本机IP dos命令:ipconfig 可以看到本机的IP地址是192.168.0.102,当然这也是局域网IP,并 ...
- vim显示行号
在Linux环境下的编辑器有vi.vim.gedit等等.进入这些编辑器之后,为了方便我们需要编辑器显示出当前的行号,可偏偏编辑器默认是不会显示行号的.我们有二种办法可以解决: 第一种是,手动显示:在 ...
- WPF 元素绑定
1.什么是数据绑定数据绑定是一种关系,WPF程序从源对象中提取一些信息,并根据这些信息设置目标对象的属性,目标属性作为依赖项属性.源对象可以是任何内容,可以是另一个wpf内容,甚至是自行创建的纯数据对 ...
- onfiguration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/security]
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Una ...
- 【Django】如何自定义manage.py命令? 达到启动后台进程的目的?
代码: #-*- coding:utf- -*- """ The handle active user mail send """ from ...