内容提供

public class PersonContentProvider extends ContentProvider{

private static final String AUTHORITY = "com.itheima28.sqlitedemo.providers.PersonContentProvider";
 private static final int PRESON_INSERT_CODE = 0; // 操作person表添加的操作的uri匹配码

UriMatcher uriMatcher;

private PersonSQLiteOpenHelper mOpenHelper;

static{

uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);

uriMatcher.addURI(AUTHORITY, "person/insert", PRESON_INSERT_CODE);

}

@Override
 public boolean onCreate() {
  mOpenHelper = new PersonSQLiteOpenHelper(getContext());
  return true;
 }

@Override
 public Uri insert(Uri uri, ContentValues values) {
  
  switch (uriMatcher.match(uri)) {
  case PRESON_INSERT_CODE: // 添加人到person表中
   SQLiteDatabase db = mOpenHelper.getWritableDatabase();
   
   if(db.isOpen()) {
    
    long id = db.insert("person", null, values);
    
    db.close();
    
    return ContentUris.withAppendedId(uri, id);
   }
   break;
  default:
   throw new IllegalArgumentException("uri不匹配: " + uri);
  }
  return null;
 }

}

UriMatcher

内容访问

ContentResolver resolver = getContext().getContentResolver();

uri = resolver.insert(uri, values);

int count = resolver.delete(uri, where, selectionArgs);

int count = resolver.update(uri, values, "_id = ?", new String[]{"20"});

Cursor cursor = resolver.query(uri, new String[]{"_id", "name", "age"}, null, null, "_id desc");

内容监听

resolver.registerContentObserver(Uri.parse("content://sms/"), true, new MyContentObserver(new Handler()));   //注册内容监听

class MyContentObserver extends ContentObserver {

private static final String TAG = "MyContentObserver";

public MyContentObserver(Handler handler) {

super(handler);

}

/**    * 当被监听的内容发生改变时回调    */

@Override

public void onChange(boolean selfChange) {

Log.i(TAG, "短信改变了");

Uri uri = Uri.parse("content://sms/outbox"); // 发件箱的uri        // 查询发件箱的内容

Cursor cursor = getContentResolver().query(uri, new String[]{"address", "date", "body"}, null, null, null);

if(cursor != null && cursor.getCount() > 0) {          String address;     long date;     String body;

while(cursor.moveToNext()) {      address = cursor.getString(0);      date = cursor.getLong(1);      body = cursor.getString(2);

Log.i(TAG, "号码: " + address + ", 日期: " + date + ", 内容: " + body);     }

cursor.close();

}   }  }

ContentProvider ContentResolver ContentObserver 内容:提供、访问、监听的更多相关文章

  1. Android短信监听(二)——利用ContentObserver实现短信监听

    MainActivity例如以下: package cc.testsmslistener; import cc.testsmslistener.SMSContentObserver.MessageLi ...

  2. 百度编辑器的内容改变事件监听bug

    先贴上我的初始化代码,可能是用法问题冤枉了百度编辑器,如果是我的用法有问题欢迎大侠们指正 <!DOCTYPE type> <html> <head> <met ...

  3. input输入框内容变化实时监听

    js实现的文本框内容发生改变立马触发事件简单介绍:本章节介绍一下如何在文本框的内容发生变化的时候,立马触发一个事件执行响应的操作,而不是像是keydown或者keyup事件一样,只能够检测通过键盘输入 ...

  4. Android简易实战教程--第二十一话《内容观察者监听数据库变化》

    当数据库的数据发生改变,我们又想知道具体改变的情况时,就需要对数据库的变化情况做一个监控.这个任务,就由内容观察者来完成.下面这个案例,为短信数据库注册内容观察者,来监控短信的变化情况,当短信数据库发 ...

  5. edittext 监听内容变化

    给EditText追加ChangedListener可以监听EditText内容变化的监听 如图是效果图  类似于过滤的一种实现 1  布局也就是一个EditText,当EditText内容发生变化时 ...

  6. Android EditText内容监听

    监听 EditText的内容变化,作出对应的处理. MainActivity.class package com.example.edittextdemo; import android.app.Ac ...

  7. Spring DM所提供的Bundle监听接口OsgiBundleApplicationContextListener

    通过使用Spring DM提供的监听接口,我们可以更好的对服务进行管控,其实该接口也非常简单就能使用上,只要自定义一个类实现OsgiBundleApplicationContextListener接口 ...

  8. 时时监听input内容的改变

    心得:我们都知道input有一个change事件,但是是在input元素失去焦点的时候发生,不能时时的监听input内容的改变. 刚开始的时候我是想用setInterval设置计时器的原理定时监听in ...

  9. Android短信监听实现,及Android4.4之后短信机制变更

    前阵子公司有一个项目,简单的监听短信应用,功能只有如下两个: 1.监听短信并获取短信内容上传服务器: 2.从服务器获取短信内容,发送出去    按照传统的思路,监听短信我们有两种方式:第一种是使用广播 ...

随机推荐

  1. js select下拉框下拉跳转代码

    下拉跳转原理很简单这个用到了select的onchangeg事件,只要这里改变我们就获取select值直接location.href=this.value即可. <select name=&qu ...

  2. 图解jvm--(一)jvm内存结构

    jvm内存结构 1.程序计数器 1.1 定义 Program Counter Register 程序计数器(寄存器) 作用,记住下一条jvm指令的执行地址 特点 是线程私有的 (唯一)不会存在内存溢出 ...

  3. 仿有道词典App开发

    最近在学习HCoder提供的仿有道词典App项目,该项目采用MUI为前端框架,服务端采用PHP,底层采用了H5+.

  4. [LuoguP1203][USACO1.1]P1203 Broken Necklace

    Solution 这道题数据规模奇小,因此大部分人都使用了暴力搜索的方法,这也是我一开始的想法. 对于 100100%100 的数据,3≤n≤3503≤n≤3503≤n≤350 的确可以如此,但暴力搜 ...

  5. 报错信息 Context []startup failed due to previous errors

    文章转自:http://blog.sina.com.cn/s/blog_49b4a1f10100q93e.html 框架搭建好后,启动服务器出现如下的信息: log4j:WARN No appende ...

  6. 提升Essay写作质量,可从这三个层次入手

    “有针对性”读书对写Essay的产生的帮助是非常大的.由浅显的直接成效,到深度的铺垫积累,阅读一共可分为三个层次: 1读Essay: 2读与写作题材相关的材料: 3多样化阅读. 第一层次:读Essay ...

  7. [LeetCode] 326. Power of Three + 342. Power of Four

    这两题我放在一起说是因为思路一模一样,没什么值得研究的.思路都是用对数去判断. /** * @param {number} n * @return {boolean} */ var isPowerOf ...

  8. 【Unity】稍微说一下关于各种坐标的转换。比如WorldToScreenPoint

    之前写了一篇关于在物体头顶上显示名字的随笔. 估计难懂的点就在各种坐标的转换. 这里详细(就我这水平,怎么可能详细~~~)解说一下.额............. 用另一种方式举个栗子吧. 还是实现在物 ...

  9. 吴裕雄--天生自然JAVA数据库编程:JDBC操作步骤及数据库连接操作

    public class ConnectionDemo01{ // 定义MySQL的数据库驱动程序 public static final String DBDRIVER = "org.gj ...

  10. (十)微信小程序---上传图片chooseImage

    官方文档 示例一 wxml <view bindtap="uploadImage">请上传图片</view> <image wx:for=" ...