【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 1467|回复: 0

Android中短信监听的各种问题,实现监听短信的功能

[复制链接]
发表于 2013-1-26 01:58:04 | 显示全部楼层 |阅读模式
写一个短信监听程序,大家很容易想到的就是注册一个广播接收器,来接收系统收到短信时候的广播。可是这个广播是有序广播,就是当别的程序先获取到了这个广播再传递给你,当然它也可以干掉这个广播,让你接收不到,这样你的程序肯定是接收不到这个广播的了。网上有很多这样的例子,什么提高广播接收器的优先级又是1000又是10000的。。

大家可以看看这个广播的基本介绍:http://wenku.baidu.com/view/226f9dd5b14e852458fb57ba.html

这里提到了把intent-filter中的android:priority的值设置为1000,但是在实时中你设置1000一样是接受不到广播的,除非你把手机中的其他接受了这个广播的短信卸载,比如360 GO短信,飞信神马的。他们的优先级总是要比你的高。你可以继续BAIDU,有的人会设置它为10000 9999等等,你会发现设置为10000的时候偶尔可以接收到,仅仅是偶尔。那肿么办呢。

我下面用的方法不是去接收系统广播,而是去监听短信数据库的变化,当收到短信数据库变化了的时候,去取得最新的那条短信即可。或者你想别的什么操作也可以。

监听类SmsReceiver.java
  1. package com.pei.broadcastReceiver;   
  2. import java.util.List;   
  3. import com.pei.fixed.AllFinalInfo;
  4. import com.pei.info.SmsInfo;
  5. import com.pei.util.SmsContent;   
  6. import android.app.Activity;
  7. import android.database.ContentObserver;
  8. import android.net.Uri;
  9. import android.os.Handler;
  10.   
  11. /**
  12.   * class name:SmsReceiver
  13.   * class description:数据库改变监听类
  14.   * PS:当数据改变的时候,执行里面才change方法
  15.   * Date:2012-3-16
  16.   *
  17.   * @version 1.00
  18.   * @author CODYY)peijiangping
  19.   */
  20. public class SmsReceiver extends ContentObserver {
  21.      /**
  22.       * Activity对象
  23.       */
  24.      private Activity activity;
  25.      private List<SmsInfo> infos;
  26.   
  27.      public SmsReceiver(Handler handler, Activity activity) {
  28.          super(handler);
  29.          this.activity = activity;
  30.      }
  31.   
  32.      @Override
  33.      public void onChange(boolean selfChange) {
  34.          Uri uri = Uri.parse(AllFinalInfo.SMS_URI_INBOX);// 设置一个uri来查看各种类别短信内容
  35.          SmsContent smscontent = new SmsContent(activity, uri);
  36.          infos = smscontent.getSmsInfo();
  37.          System.out.println(infos.get(1).getSmsbody());
  38.          super.onChange(selfChange);
  39.      }
  40. }

复制代码
怎么注册这个监听呢,只需:
  1. ContentObserver co = new SmsReceiver(new Handler(), AndroidUtilActivity.this);      
  2. this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, co);  
复制代码
SmsContent.java内容请参考上篇http://www.2cto.com/kf/201203/123797.html博客。AllFinalInfo.SMS_URI_INBOX也请参考上篇博客。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2024-9-29 05:09

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表