内容提供

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. FPGA流程设计

    做fpga也有四年时间了,该有个总结.刚开始那会,学习东西都是死记硬背,去面试也是直接带着答案去了. 时间久了,才懂得设计一些基本思路. 1. 设计输入: verilog代码和原理图.画原理图都是懒得 ...

  2. springmvc教程(1)

    idea搭建springmvc maven项目 jdk:1.8 maven:Bundled (Maven 3) idea版本: 开始搭建第一个springmvc maven项目 1.点击File-&g ...

  3. 0. GC 前置知识

    阅读<垃圾回收的算法与实现>时记录的一些笔记. 对象 在GC的世界中,对象表示的是"通过应用程序利用的数据的集合" 头 我们将对象中保存对象本身信息的部分称为头.头主要 ...

  4. Linux 内核 编译模块

    背景: 由于调试内核或者由于分区大小限制,有时候内核组件不一定完全需要编进内核中. 所以,在开发中经常将内核组件编译成为模块,等到在恰当的时机加载. 概览: Linux内核模块的编译方法有两种: 1. ...

  5. 解决Google浏览器不能打开kubernetes dashboard方法【转】

    在这片文章中,我将展示如何在Google Chrome上打开kubernetes dashboard.本文不叙述如何安装搭建docker和kubernetes,有关详情请上网查阅! 很多小伙伴们在自己 ...

  6. ThinkPad重大更新!5款创意设计PC齐发2日

    导读 日前,ThinkPad巨匠P系列专业移动工作站迎来全线更新,包括ThinkPad P1隐士2019.ThinkPad P53.ThinkPad P73.ThinkPad P43s.ThinkPa ...

  7. 新闻网大数据实时分析可视化系统项目——21、大数据Web可视化分析系统开发

    1.基于业务需求的WEB系统设计 2.下载Tomcat并创建Web工程并配置相关服务 下载tomcat,解压并启动tomcat服务. 1)新建web app项目 创建好之后的效果 2)对tomcat进 ...

  8. 解决win10创建Django工程,运行django-admin.py startproject 工程名,失败的问题

          在看我这篇教程的前提是你应该已经正确装好python和Django了,好了,废话不说了,正题走你!你现在是不是很纠结自己运行django-admin.py startproject 工程名 ...

  9. android名词

    NDK:Native Development Kit JNI:Java Native Interface

  10. Vulkan SDK Demo 之一 熟悉

    DiligentEngine的API是D3d11和D3D12风格的,vulkan也被封装成了这种风格的API. 在了解Diligent Engine是如何对vulkan进行封装之前,我准备先学习下Vu ...