当前位置: 移动技术网 > 移动技术>移动开发>Android > Android编程之监听器用法实例分析

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

2019年07月24日  | 移动技术网移动技术  | 我要评论

本文实例讲述了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程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网