Android编程之监听器用法实例分析

本文实例讲述了Android编程之监听器用法。分享给大家供大家参考,具体如下:

这里通过监听内容提供者数据变化和监听发送短信进行讲解监听器。如果用户提供者数据发生了变化,监听器立刻就能收到对数据库操作的记录,而监听器是采用通知的机制,如果不采用通知的机制也可以做,那就是不断的查询数据库,这样的话效率就会很低。而采用通知机制的话,当用户向数据库发送一条记录,ContentObserver立刻就能获取到,我们就可以进行处理数据。

监听内容提供者数据的变化

1.在内容提供者中可以通知其他程序数据发生变化时进行监听

通过Context的getContentResolver()方法获取ContentResolver

调用其notifyChange()方法发送数据修改通知

2.在其他程序中可以通过ContentObserver监听数据变化

通过Context的getContentResolver()方法获取ContentResolver

调用其registerContentObserver()方法指定对某个Uri注册ContentObserver

自定义ContentObserver,重写onChange()方法获取数据

比如在用户插入数据的时候进行监听通知:

public Uri insert(Uri uri, ContentValues values) {
  SQLiteDatabase db = helper.getWritableDatabase();
  switch (matcher.match(uri)) {
    case PERSON_ALL:
      long id = db.insert("person", "id", values);
      // 监听通知
      getContext().getContentResolver().notifyChange(uri, null);
      return ContentUris.withAppendedId(uri, id);
    default:
      throw new IllegalArgumentException("Unmatch Uri: " + uri);
  }
}

在另外一个工程中进行监听,一旦用户进行插入操作,我立刻就可以自动获取到用户插入的记录:

public class MainActivity extends Activity {
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    getContentResolver().registerContentObserver(Uri.parse("content://cn.itcast.provider.itcast/person"), true, new MyObserver(new Handler()));
  }
  class MyObserver extends ContentObserver {
    public MyObserver(Handler handler) {
      super(handler);
    }
    //当监听到数据发生了变化就调用这个方法,并将新添加的数据查询出来
    public void onChange(boolean selfChange) {
      ContentResolver resolver = getContentResolver();
      Uri uri = Uri.parse("content://cn.itcast.provider.itcast/person");
      Cursor cursor = resolver.query(uri, new String[] { "id", "name", "phone", "balance" }, null, null, "id DESC LIMIT 1");
      while (cursor.moveToNext()) {
        System.out.print(cursor.getString(0) + " ");
        System.out.print(cursor.getString(1) + " ");
        System.out.print(cursor.getString(2) + " ");
        System.out.println(cursor.getString(3));
      }
    }
  }
}

监听发送短信

1.Android系统提供了Provider对短信进行查询,当发出短信时也会发送更改通知

2.定义一个Observer监听"content://sms"

3.在onChange()方法中查询用户发送的短信"content://sms/outbox"

4.短信发送信息存放在数据库 date/date/com.android.providers.telephony

5.需要权限<uses-permission android:name="android.permission.READ_SMS" />

示例:

public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  getContentResolver().registerContentObserver(Uri.parse("content://sms"), true, new SmsObserver(new Handler()));
}
//监听发送的短信
private final class SmsObserver extends ContentObserver {
  public SmsObserver(Handler handler) {
    super(handler);
  }
  public void onChange(boolean selfChange) {
    ContentResolver resolver = getContentResolver();
    //查到发出的短信
    Uri uri = Uri.parse("content://sms/outbox");
    Cursor cursor = resolver.query(uri, new String[] { "date", "address", "body" }, null, null, "_id desc limit 1");
    if (cursor.moveToNext()) {
      long ms = cursor.getLong(0);
      String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(ms));
      String address = cursor.getString(1);
      String body = cursor.getString(2);
      System.out.println(date + " " + address + " " + body);
    }
  }
}

希望本文所述对大家Android程序设计有所帮助。

(0)

相关推荐

  • Android编程中selector背景选择器用法实例分析

    本文实例讲述了Android编程中selector背景选择器用法.分享给大家供大家参考,具体如下: 在Android开发过程中,经常对某一View的背景在不同的状态下,设置不同的背景,增强用户体验.如果按钮,在按下时,背景变化,如果在代码中动态设置,相对比较麻烦.Android为我们提供了selector背景选择器可以非常方便的解决这一问题. Selector的结构描述: 1.android:state_pressed="true/false" true:表示按下状态下使用,false

  • Android的Launcher启动器中添加快捷方式及小部件实例

    前言: 最近一直在看Launcher模块,经过差不多两个月学习,终于摸透了Launcher的一些主要功能实现,目前继续还处于 摸索状态.未看Launcher时,于我而言,只能膜拜,以为所有功能都是它实现的 :入门后,才发现,Launcher的很多功能只是 集成了框架/应用程序提供的功能.很多陌生的东西,只有接触了才感叹:"oh ,原来是这样的!" 添加快捷方式 今天先给大家分享下Launcher如何实现添加快捷方式(Shortcut) ,后续会慢慢增加其他方面的功能,帮助大家"

  • Android自定义播放器控件VideoView

    介绍 最近要使用播放器做一个简单的视频播放功能,开始学习VideoView,在横竖屏切换的时候碰到了点麻烦,不过在查阅资料后总算是解决了.在写VideoView播放视频时候定义控制的代码全写在Actvity里了,写完一看我靠代码好乱,于是就写了个自定义的播放器控件,支持指定大小,可以横竖屏切换,手动左右滑动快进快退.好了,下面开始. 效果图有点卡,我也不知道为啥..... VideoView介绍 这个是我们实现视频播放最主要的控件,详细的介绍大家百度就去看,这里介绍几个常用的方法. 用于播放视频

  • Android编程之简单计时器实现方法

    本文实例讲述了Android编程之简单计时器实现方法.分享给大家供大家参考,具体如下: 这里利用ContextMenu(上下文菜单),Chronometer实现简单计数器. Main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android

  • Android仿微信照片选择器实现预览查看图片

    好了下面进入正题,我们先看一下实现效果吧: 下面来介绍一下代码: 本思路就是: 1.先到手机中扫描jpeg和png的图片 2.获取导图片的路径和图片的父路径名也就是文件夹名 3.将图片路径和文件夹名分别添加导数据源中 4.数据源有了就是显示了,文件夹显示是利用的popwindow,而图片显示则是GridView 看一下具体代码: 首先开启一个线程去扫描图片 /** * 利用ContentProvider扫描手机中的图片,此方法在运行在子线程中 完成图片的扫描,最终获得jpg最多的那个文件夹 */

  • Android编程实现任务管理器的方法

    本文实例讲述了Android编程实现任务管理器的方法.分享给大家供大家参考,具体如下: 任务管理器可以实现的功能有: 1.查看当前系统下运行的所有的进程 2.可以查看每个进程的进程号.版本号以及内存占用情况 3.杀死进程(可以杀死全部进程或者杀死指定的进程) 4.查看系统剩余内存 效果图: 杀死全部进程 实现思路: ActivityManager类可以获取到当前系统的所有进程,以及每个进程的信息,也可以杀死某个进程, ActivityManager.getRunningAppProcesses(

  • Android编程开发音乐播放器实例

    本文实例讲述了Android编程开发音乐播放器,分享给大家供大家参考,具体如下: 音乐播放器中综合了以下内容: SeekBar.ListView.广播接收者(以代码的形式注册Receiver).系统服务.MediaPlayer 实现的功能: 1.暂停/播放.下一首/上一首,点击某一首时播放 2.支持拖动进度条快进 3.列表排序 4.来电话时,停止播放,挂断后继续播放 5.可在后台播放 效果图: 界面: main.xml: <?xml version="1.0" encoding=

  • Android开发之简单文件管理器实现方法

    本文实例讲述了Android开发之简单文件管理器实现方法.分享给大家供大家参考,具体如下: 这里运用Java I/O.ListActivity.Dialog.Bitmap等实现简单文件管理器,可以查看目录文件,修改文件名,删除文件,打开文件.比较简单,直接看代码: 先看布局文件: layout/main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&q

  • Android调用系统默认浏览器访问的方法

    一.启动android默认浏览器 这样子,android就可以调用起手机默认的浏览器访问. 二.指定相应的浏览器访问 1.指定android自带的浏览器访问 ( "com.android.browser":packagename :"com.android.browser.BrowserActivity":启动主activity) Intent intent= new Intent(); intent.setAction("android.intent.a

  • Android编程实现网络图片查看器和网页源码查看器实例

    本文实例讲述了Android编程实现网络图片查看器和网页源码查看器.分享给大家供大家参考,具体如下: 网络图片查看器 清单文加入网络访问权限: <!-- 访问internet权限 --> <uses-permission android:name="android.permission.INTERNET"/> 界面如下: 示例: public class MainActivity extends Activity { private EditText image

  • Android开发之关闭和打开Speaker(扬声器)的方法

    本文实例讲述了Android开发之关闭和打开Speaker(扬声器)的方法.分享给大家供大家参考,具体如下: private int currVolume = 0; /** * 打开扬声器 */ private void openSpeaker() { try{ AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); audioManager.setMode(AudioManager.

随机推荐