广播接收器与短信监听

一、广播接收器

1、使用new-other-broadcast receiver来创建一个广播接收器

2、重写onReceiver方法来编写监听执行逻辑

3、在文件清单中注册的广播接收器(AndroidStudio自动生成)中添加过滤器(即监听的广播),确定器所监听的广播

标签中添加

4、在主活动中实例化一个IntentFilter来声明可接收的广播

例如Intent filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED)

5、使用registerReceiver来注册一个接收器,使其可以接收广播,参数分别是广播接收器类和上面实例化的IntentFilter

二、短信监听的实现思路

1、使用广播接收器来实现

a、接收短信的动作是android.provider.Telephony.SMS_RECEIVED

b、这种方法实现起来较为简单且直观,不受活动的生命周期限制

c、这种方法有可能受到不同的机型影响,结果不同

在安卓9虚拟机上后台运行或退出均可监听,在华为mate系列安卓10设备测试在活动状态和后台可以监听

d、这种方式有可能受到其他软件显示,假如其他软件受到广播并取消了广播,则无法完成监听操作

2、使用服务检测短信数据库

a、在项目中创建一个新的服务

b、创建一个继承于ContentObserver的类,并重写onChange函数。在Uri对应数据库发生改变时会回调该函数

c、在创建的服务类中实例化一个上面创建的类,并实例化一个Uri

d、使用getContentResolver().registerContentObserver()方法注册观察者。

该方法有三个参数,第一个参数和第三个参数分别是实例化的Uri和创建继承于ContentObserver的类,第二个方法代表是否精确匹配,当时flase时是精确匹配,为true时还可以匹配Uri的派生类

e、这种方式在收到短信时会回调多次onChange方法,需要进行人工筛选

f、经测试,两种方式在没有其他应用干扰的情况下,效果是类似的

遇到的问题 详细说明 出现原因及解决
找不到getContentResolver方法 找不到方法,无法实现观察者注册 需要一个对应的上下才能够执行,没有办法直接执行getContentResolver方法解决方案:调用上下文对应的getContentResolver方法即可,如this.getContentResolver或getApplicationContext().getContentResolver()
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇