zoukankan      html  css  js  c++  java
  • Android(java)学习笔记198:ContentProvider使用之内容观察者(观察发出去的短信)

    1.新建一个案例如下:

    2. 不需要添加权限,同时这里布局文件不做修改,来到MainActivity,如下:

     1 package com.itheima.sendsmslistener;
     2 
     3 import android.net.Uri;
     4 import android.os.Bundle;
     5 import android.os.Handler;
     6 import android.app.Activity;
     7 import android.database.ContentObserver;
     8 import android.view.Menu;
     9 
    10 public class MainActivity extends Activity {
    11 
    12     @Override
    13     protected void onCreate(Bundle savedInstanceState) {
    14         super.onCreate(savedInstanceState);
    15         setContentView(R.layout.activity_main);
    16         getContentResolver().registerContentObserver(Uri.parse("content://sms"), true, new MyObserver(new Handler()));
    17     }
    18 
    19 
    20     private class MyObserver extends ContentObserver{
    21 
    22         public MyObserver(Handler handler) {
    23             super(handler);
    24         }
    25         
    26         @Override
    27         public void onChange(boolean selfChange) {
    28             super.onChange(selfChange);
    29             System.out.println("短信的数据库变化了。");
    30             //查询数据库。
    31         }
    32     }
    33 }

    3.布署程序到模拟器上,如下:

    在系统联系人中添加一个联系人,发送短信给这个联系人,如下:

    观察Logcat打印的日志,如下:

    09-15 07:42:33.109: I/System.out(644): 短信的数据库变化了。
    09-15 07:42:34.739: I/System.out(644): 短信的数据库变化了。
    09-15 07:42:35.189: I/System.out(644): 短信的数据库变化了。

         我们输入一条短信发送,会打印三条日志,也就是说onChange()方法被调用了3次,也就是说数据库改变了3次,为什么我们输入发送一条短信,数据库改变3次

    答:这是因为,我们发送短信,短信会经过3种状态:" 草稿 " ---> " 发送中 " ---> " 已发送 ";

    (1)当我们编辑完短信,短信形成草稿,在数据库中存在标记字段,这个标记字段标记为某个数字或者字符(含义是短信是草稿),这个时候数据库变化,调用一次onChange()方法

    (2)形成草稿的短信  要发送,数据库相应标记字段又要变化(含义短信正在发送),这个时候数据库变化,再次调用一次onChange()方法

    (3)短信发送成功之后,此时短信标记为已发送这个时候数据库变化,最后一次调用onChange()方法

    这样出现了3次调用onChange()方法

  • 相关阅读:
    Numpy随机数组的创建
    python map()
    LeetCode回溯系列(1)——第17题解法
    LeetCode回溯系列(0)——回溯算法讲解
    LeetCode位操作系列(1)——位操作在第190题中的运用
    LeetCode位操作系列(0)——位操作奇技淫巧之原理加实践
    python PIL 图像处理库简介
    plt.plot()的使用方法以及参数介绍
    关于.split()和os.sep的联合应用
    【mac清理】慎用CleanMyMac X
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4810543.html
Copyright © 2011-2022 走看看