内容提供

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. IdentityServer4专题之二:OpenID介绍

    1.基于概念 OpenId是一个以用户为中心的数字身份识别框架,它具有开放.分散.自由等特性.OpenId的创建是基于这样一个概念:我们可以通过URI(或者URL网址)来识别一个网站.同样,我们也可以 ...

  2. netcore webCache缓存

    NetCoreCacheService.dll public IActionResult Index() { //存入字符串 MemoryCacheService.SetChacheValue(&qu ...

  3. C#中的扩展类的理解

    扩展类是一种静态的一种类的调用方法,通过实例化进行调用.利用this进行指正该类,有参数的时候直接在后面追加参数. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  4. centos 6.5安装NodeJS

    centos 6.5安装NodeJS 下载 可以在本地下载node.js最新版,然后通过ftp工具上传到服务器,或者直接在服务器终端使用wget命令下载(我当时下载的是node-v7.5.0-linu ...

  5. vscode点击ctrl键报错Request textDocument/definition failed.

    现象 用vscode写java代码的时候突然出现,修复问题点击Ctrl时,输出窗口就打日志,报错Request textDocument/definition failed. 我百度唯一的有用线索就是 ...

  6. RocketMQ 单机部署(单master模式)

    一.为了快速了解rockmq,先搭建一个简单的单机版的rocketmq,前期准备:1.CentOS 7.6 64位(阿里云)(4G内存) 2.jdk1.8 3.maven 3.5.4 4.直接从官网上 ...

  7. Redis Cluster 4.0.9 集群安装搭建

    Redis Cluster 4.0.9集群搭建步骤:yum install -y gcc g++ gcc-c++ make openssl cd redis-4.0.9 make mkdir -p / ...

  8. Vue生命周期 钩子函数和组件传值

    Vue生命周期 钩子函数 每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听.编译模板.将实例挂载到 DOM 并在数据变化时更新 DOM 等. 同时在这个过程中也会运行一 ...

  9. css调试与样式优先级

    如何查看一个标签的当前css样式 如上图所示 先用标签选择器选择某个标签 然后在elements区域就会自动找到该标签 然后在右侧的styles区域整个区域都是该标签的样式,从上到下是显示的优先级,被 ...

  10. makecert 制作数字证书 给DLL加一个数字签名

    声明:文章整理自互联网 我仅需要给dll添加(替换)一个签名,所以我只看了第一步和第三步,其余的部分我没有测试,不能保证内容的是否正确. 看了很多关于DLL加签名的教程 大多是错误的 完全无法正常走下 ...