内容提供者 ContentResolver 数据库 示例 -2
MainActivity
public class MainActivity extends ListActivity {// 访问内容提供者时需要的主机名称public static final String authority = "com.bqt.contentprovider.person";private TextView tv_info;private ContentResolver resolver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);String[] array = { "获取所有数据", "插入一条name=bqt的数据", "修改name=bqt的数据", "删除name=bqt的数据", "清空所有数据",//"读取收件箱信息", "往收件箱插入一条信息", "读取手机联系人", "查询\"110\"的联系人信息", "添加一个新的联系人" };for (int i = 0; i < array.length; i++) {array[i] = i + "、" + array[i];}ListAdapter mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>(Arrays.asList(array)));resolver = getContentResolver();// 获取内容解析器tv_info = new TextView(this);// 将内容显示在TextView中tv_info.setTextColor(Color.BLUE);tv_info.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);tv_info.setPadding(20, 10, 20, 10);getListView().addFooterView(tv_info);setListAdapter(mAdapter);}@Overrideprotected void onListItemClick(ListView l, View v, int position, long id) {Uri uri = null;Uri returnUri = null;StringBuffer sb = new StringBuffer();int num = 0;ContentValues values = new ContentValues();// 要修改或插入的数据switch (position) {case 0: // 获取所有数据uri = Uri.parse("content://" + authority + "/query");// 指定解析器要解析的路径。注意query前要加路径分隔符【/】Log.i("bqt", uri.toString());//【 content://com.bqt.contentprovider.person/query】Cursor cursor = resolver.query(uri, null, null, null, null);// 获取解析器解析的结果集if (cursor != null) {while (cursor.moveToNext()) {int uId = cursor.getInt(cursor.getColumnIndex("id"));// 取出需要的内容String uName = cursor.getString(cursor.getColumnIndex("name"));String uNumber = cursor.getString(cursor.getColumnIndex("number"));sb.append("id:" + uId + " name:" + uName + " number:" + uNumber + "\n");}tv_info.setText(sb.toString());cursor.close();}break;case 1:// 插入一条数据uri = Uri.parse("content://" + authority + "/insert");values.put("id", new Random().nextInt(10));values.put("name", "bqt");values.put("number", "10086");returnUri = resolver.insert(uri, values);tv_info.setText("插入信息的uri:" + returnUri.toString());break;case 2: // 修改一条数据uri = Uri.parse("content://" + authority + "/update");values.put("name", "dog");values.put("number", "10087");num = resolver.update(uri, values, "name=?", new String[] { "bqt" });// 指定uri,values,Where子句,占位符的值tv_info.setText("修改信息个数:" + num);break;case 3: // 删除一条数据uri = Uri.parse("content://" + authority + "/delete");num = resolver.delete(uri, "name=?", new String[] { "bqt" });tv_info.setText("删除信息个数:" + num);break;case 4: // 清空,删除所有数据uri = Uri.parse("content://" + authority + "/delete");num = resolver.delete(uri, null, null);tv_info.setText("删除信息个数:" + num);break;//******************************************************************************************case 5: // 读取收件箱信息readMsgs();break;case 6: // 往收件箱插入一条信息insertMsg();break;case 7: // 读取手机联系人readContact();break;case 8: // 查询指定电话的联系人信息queryContact("110");break;case 9: // 添加一个新的联系人writeContact();break;}}/** 读取收件箱信息。<uses-permission android:name="android.permission.READ_SMS"/> */public void readMsgs() {Uri uri = Uri.parse("content://sms/");ContentResolver resolver = getContentResolver();//获取的是哪些列的信息Cursor cursor = resolver.query(uri, new String[] { "address", "date", "type", "body" }, null, null, null);if (cursor != null) {StringBuffer sb = new StringBuffer();while (cursor.moveToNext()) {sb.append("联系人:" + cursor.getString(cursor.getColumnIndex("address")));sb.append("\n时间:" + cursor.getString(cursor.getColumnIndex("date")));sb.append("\n类型:" + cursor.getString(cursor.getColumnIndex("type")));sb.append("\n内容:" + cursor.getString(cursor.getColumnIndex("body")));sb.append("\n===============================\n");}tv_info.setText(sb.toString());cursor.close();}}/**读取手机收件箱,返回一个集合*/public ArrayList<String> getSms() {ArrayList<String> mArrayList = new ArrayList<String>();ContentResolver resolver = getContentResolver();Uri uri = Uri.parse("content://sms/");Cursor cursor = resolver.query(uri, new String[] { "body", "address", "type", "date" }, null, null, null);SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());while (cursor.moveToNext()) {String body = "内容:" + cursor.getString(0);String address = "联系人:" + cursor.getString(1);String type = "类型:" + cursor.getString(2);//1是接收到的,2是已发出 ,但是 3 是什么鬼?String date = "时间:" + formatter.format(new Date(Long.parseLong(cursor.getString(3))));mArrayList.add(new String(body + "\n" + address + "\n" + type + "\n" + date + "\n\n"));}cursor.close();return mArrayList;}/** 往收件箱插入一条信息,"android.permission.WRITE_SMS" 。从5.0开始,默认短信应用外的软件不能以写入短信数据库的形式发短信 */public void insertMsg() {ContentValues values = new ContentValues();values.put("address", "10086");//联系人values.put("type", 1);//类型1是"收到"的短信values.put("date", System.currentTimeMillis());//收到的时间values.put("body", "您的余额还有1,000,000万元!");//内容Uri returnUri = resolver.insert(Uri.parse("content://sms"), values);if (returnUri != null) {tv_info.setText(returnUri.toString());if (returnUri.getPath().equals("/0")) {Toast.makeText(this, "添加失败:" + returnUri.getPath(), Toast.LENGTH_SHORT).show();} else {Toast.makeText(this, "添加成功:" + returnUri.getPath(), Toast.LENGTH_SHORT).show();}}}/** 读取手机联系人 <uses-permission android:name="android.permission.READ_CONTACTS"/> */public void readContact() {//查询raw_contacts表获得联系人的idContentResolver resolver = getContentResolver();Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;//查询联系人数据Cursor cursor = resolver.query(uri, null, null, null, null);if (cursor != null) {StringBuffer sb = new StringBuffer();while (cursor.moveToNext()) {sb.append("姓名:" + cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)));sb.append("\n号码:" + cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));sb.append("\n===============================\n");}tv_info.setText(sb.toString());cursor.close();}cursor.close();}/**查询指定电话的联系人信息*/public void queryContact(String number) {Uri uri = Uri.parse("content://com.android.contacts/data/phones/filter/" + number);ContentResolver resolver = getContentResolver();Cursor cursor = resolver.query(uri, new String[] { "display_name" }, null, null, null);if (cursor != null) {if (cursor.moveToFirst()) {String name = cursor.getString(0);Toast.makeText(this, number + "对应的联系人名称:" + name, Toast.LENGTH_SHORT).show();} else {Toast.makeText(this, number + "木有此联系人", Toast.LENGTH_SHORT).show();}cursor.close();}}/**读取手机联系人,返回一个集合*/public List<Map<String, String>> getContacts() {//把所有的联系人保存在List集合中List<Map<String, String>> list = new ArrayList<Map<String, String>>();ContentResolver resolver = getContentResolver();Uri uriId = Uri.parse("content://com.android.contacts/raw_contacts");//id信息Uri uriData = Uri.parse("content://com.android.contacts/data");//具体的联系人信息//获取包含id的结果集Cursor cursor = resolver.query(uriId, new String[] { "contact_id" }, null, null, null);//遍历此包含id的结果集while (cursor.moveToNext()) {String contact_id = cursor.getString(0);if (contact_id != null) {//将对应此id的所有联系人信息保存在map集合中Map<String, String> map = new HashMap<String, String>();Cursor dataCursor = resolver.query(uriData, new String[] { "data1", "mimetype" }, "contact_id=?", new String[] { contact_id }, null);//遍历对应此id的所有联系人信息的结果集while (dataCursor.moveToNext()) {String data1 = dataCursor.getString(0);//联系人信息String mimetype = dataCursor.getString(1);//此联系人信息的类型//若mimetype为联系人的姓名或电话号码,则以相应的格式保存在map集合中if ("vnd.android.cursor.item/name".equals(mimetype)) map.put("name", data1);//保存姓名else if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) map.put("phone", data1);//保存电话}//将map集合中的数据保存在list集合中list.add(map);dataCursor.close();}}cursor.close();return list;}/**添加一个新的联系人。"android.permission.WRITE_CONTACTS" */public void writeContact() {ContentResolver resolver = getContentResolver();Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");//保存联系人的idUri dataUri = Uri.parse("content://com.android.contacts/data");//保存联系人的数据Cursor cursor = resolver.query(uri, new String[] { "_id" }, null, null, null);// 注意列名是【_id】if (cursor.moveToLast()) {// 移动到最后一条记录int lastId = cursor.getInt(0);// 获取最后一条记录【第零列】的值(即id的值)int newId = lastId + 1;// 设定要插入的记录的id值ContentValues values = new ContentValues();values.put("contact_id", newId);//插入一条记录resolver.insert(uri, values);// 向raw_contacts表中插入一条记录//电话ContentValues phoneValues = new ContentValues();phoneValues.put("data1", "110");//向data1表中插入一条指定的值(电话)phoneValues.put("mimetype", "vnd.android.cursor.item/phone_v2");//指定这个值是一个电话类型phoneValues.put("raw_contact_id", newId);//指定这个值(电话)对应哪个idresolver.insert(dataUri, phoneValues);//emaiContentValues emaiValues = new ContentValues();emaiValues.put("data1", "bqt@qq.com");emaiValues.put("mimetype", "vnd.android.cursor.item/email_v2");emaiValues.put("raw_contact_id", newId);resolver.insert(dataUri, emaiValues);//姓名ContentValues nameValues = new ContentValues();nameValues.put("data1", "包青天");nameValues.put("mimetype", "vnd.android.cursor.item/name");nameValues.put("raw_contact_id", newId);resolver.insert(dataUri, nameValues);}cursor.close();Toast.makeText(this, "添加成功", Toast.LENGTH_SHORT).show();}}
清单文件
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.bqt.contentresolver"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="21" /><uses-permission android:name="android.permission.READ_SMS" /><uses-permission android:name="android.permission.WRITE_SMS" /><uses-permission android:name="android.permission.READ_CONTACTS" /><uses-permission android:name="android.permission.WRITE_CONTACTS" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- 内容提供者定义的权限 --><uses-permission android:name="com.bqt.permission" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name=".MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>
内容提供者 ContentResolver 数据库 示例 -2的更多相关文章
- 内容提供者 ContentResolver 数据库 示例 -1
MainActivity public class MainActivity extends ListActivity { private TextView tv_info; priv ...
- 第九天 内容提供者 ContentResolver
重点:理解ContentProvider 的作用和创建流程 1. 内容提供者,提供 其他数据库的访问. 特点 - 描述 : 它是android 四大组件之一,需要androidManife ...
- android100 自定义内容提供者
#ContentProvider,就是来操作数据的,增删改查, * 四大组件之一 * 应用的数据库是不允许其他应用访问的 * 内容提供者的作用就是让别的应用访问到你的数据库 * 内容提供者的作用:把私 ...
- Android学习---通过内容提供者(ContentProvider)操作另外一个应用私有数据库的内容
一.什么是ContentProvider? ContentProvider直译过来就是内容提供者,主要作用就是A应用提供接口给B应用调用数据,和之前介绍的sharedPreference和直接开放文件 ...
- (8)Launcher3客制化之ContentProvider内容提供者,实现其它应用改动数据库更新等操作
首先加入两个权限 <uses-permission android:name="com.android.launcher3.permission.READ_SETTINGS" ...
- 【黑马Android】(04)数据库的创建和sql语句增删改查/LinearLayout展示列表数据/ListView的使用和BaseAdater/内容提供者创建
数据库的创建和sql语句增删改查 1. 载入驱动. 2. 连接数据库. 3. 操作数据库. 创建表: create table person( _id integer primary key, nam ...
- Android 之内容提供者 内容解析者 内容观察者
contentProvider:ContentProvider在Android中的作用是对外提供数据,除了可以为所在应用提供数据外,还可以共享数据给其他应用,这是Android中解决应用之间数据共享的 ...
- Android内容提供者(Content provider)
使用ContentProvider共享数据 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据,但数据访 ...
- Android开发学习—— ContentProvider内容提供者
* 应用的数据库是不允许其他应用访问的* 内容提供者的作用就是让别的应用访问到你的数据库.把私有数据暴露给其他应用,通常,是把私有数据库的数据暴露给其他应用. Uri:包含一个具有一定格式的字符串的对 ...
随机推荐
- PHP MySQLi
PHP MySQLi 简介 PHP MySQLi = PHP MySQL Improved! MySQLi 函数允许您访问 MySQL 数据库服务器. 注释:MySQLi 扩展被设计用于 MySQL ...
- 前端/html5效果收藏
H5应用 9款漂亮的H5效果 8款漂亮的H5效果 36漂亮的button效果 颜色RGB表 省市二级联动
- MySQL重置root用户密码的方法(转)
本教程适用于采用Win2003.WinXP操作系统的迅美VPS和云主机产品. 当管理员忘记MySQL密码怎么办?屡次输入密码,仍然提示错误,网站无法正常运行,数据库也无法管理,管理员束手无策. 网站程 ...
- MYSQL id 自动加1
个人心得 建立好表以后再进行修改总是容易出错 建议用sql语句进行创建表,定义相应的属性 CREATE TABLE USER( Id INTEGER PRIMARY KEY AUTO_INCREMEN ...
- CSS3+HTML5学习笔记(1)
box内阴影: -moz-box-shadow:inset 30px #; -webkit-box-shadow:inset 30px #; box-shadow:inset 30px #; 多重文字 ...
- symfony框架在中国移动cmwap网络下访问的问题
最近用symfony框架给手机app做后台,发现在中国移动cmwap网络下会出现问题,所有请求都路由到根路径了 左图为原始$_SERVER对象,右图为$request->server对象由于re ...
- OpenStack JEOS 镜像
JEOS:Just Enough Operating System 维基百科地址:http://en.wikipedia.org/wiki/Just_enough_operating_system O ...
- jsp语法与标签
语法: <% 多行java代码 %> 在一个JSP页面中可以有多个脚本片断,在两个或多个脚本片断之间可以嵌入文本.HTML标记和其他JSP元素. 举例: <% int x = 10; ...
- HttpHelper工具类
/// <summary> /// 类说明:HttpHelper类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式,可以设置代理 /// 重要提 ...
- 一个用httpPost,get访问外网接口,参数json,返回json的示例
package com.royal.util; import java.io.BufferedReader;import java.io.DataInputStream;import java.io. ...