使用 ContentObserver 监听短信接收 onChange 方法调用两次
来源:互联网 发布:linux ant build.xml 编辑:程序博客网 时间:2024/05/29 16:46
原来我是用 BroadcastReceiver 来监听短信的接收,后来了解到用 ContentObserver 也能实现这种功能,而且还更方便。于是就尝试使用这种方法。
ContentObserver的原理是观察(捕捉)特定 Uri 引起的数据库的变化,继而可以做一些相应的处理。
在使用 ContentObserver 监听短信的过程中,发现了一个问题,问题描述如下:当手机接收到短信的时候, onChange 方法调用了一次,当打开短信App后,onChange方法又调用了一次。这样一来就调用了两次 onChange。
我们一般都不希望它调用两次,比如目前市场上的手环类App一般都具有短信提醒功能,只要手机接收到短信,手环App就会发送某些指令到手环上,手环收到指令进行振动提醒。实现的思路一般是在 onChange方法中发送数据到手环。假如出现了上述的问题,出现的结果是,手机接到短信后,手环振动一下,打开短信App,手环又振动一下。
经过一番查询。找到了解决的方法。
使用方法:
// 获取 ContentResolver mContentResolver = getContentResolver();// 注册ContentObserver ,第一个参数是 Uri,第二个参数如果为 true,则该Uri的派 生 Uri(比如 “content://sms/ inbox”)也可以监听,第三个参数是一个ContentObserver。 mContentResover.registerContentObserver(Uri.parse("content://sms"), true,new SmsContentObserverr(new Handler()));// SmsContentObserver 继承 ContentObserver:class SmsContentObserver extends ContentObserver{ private Uri mUri; public SmssReciever(Handler handler) { super(handler); } // 只要 “content://sms” 里面的数据发生了变化就会调用该方法 public void onChange(boolean selfChange,Uri uri){ super.onChange(selfChange,uri); Log.e("onChange","selfChange = "+selfChange+", Uri = "+uri.toString());// 接收短信后,然后再打开短信 App 后,两次的 Log 信息:// selfChange = false, Uri = content://sms/2750 收到短信后调用的// selfChange = false, Uri = content://sms/inbox 打开了短信 App 后调用的 // 第一遍 先执行 content://sms/raw // 第二遍则是 content://sms/inbox if (uri.toString().equals("content://sms/inbox")) { // return 后就不会执行发送数据到手环的代码了 return; } // 发送数据到手环的代码 …… }}
阅读全文
0 0
- 使用 ContentObserver 监听短信接收 onChange 方法调用两次
- 使用ContentObserver监听短信
- 使用ContentObserver监听短信
- 使用ContentObserver监听短信
- Android使用ContentObserver监听数据库变化,截取系统通知用户接收到短信
- Android短信监听功能(解决onChange触发两次的问题)
- 使用ContentObserver监听短信数据库的变化
- ContentObserver短信监听
- 关于使用ContentObserver监听不到删除短信会话的解决方案
- 监听短信获取验证码——ContentObserver的使用
- ContentObserver监听发送的短信
- Android 编程技巧之 ----- 解决短信监听 onChange 触发两次的问题
- ContentObserver 监听短信数据库,收短信
- Android_通过ContentObserver监听短信数据变化
- 9 ContentObserver 监听短信发送器
- Android ContentObserver监听短信提取验证码
- 安卓短信功能全解:调用系统短信功能发送短信、彩信,使用SmsManager发送短信,并监听发送短信的投递情况,使用广播接收器监听接收的短信。
- 监听接收短信
- Android手机卡顿原因
- vue 通过下拉框组件了解Vue中父子组件通讯
- 自定义View圆角ImageView
- webstorm 2017 激活破解
- 详述 Java 中过滤器 Listener 的工作原理及使用方法
- 使用 ContentObserver 监听短信接收 onChange 方法调用两次
- Socket、Webservice和Json (二)
- 项目日志记录优化(一)
- 人工智能与伦理道德
- 字母排序
- 1049. 数列的片段和(20)
- 侧滑菜单之ResideMenu粘贴可用
- 支持内存HPA Memory指标的Kubernetes的部署
- 算法与数据结构——算法题 79:构造回文(腾讯2017暑期实习生编程题) ? 待解决