Android广播接收器用于发送短信消息?

25

我创建了一个 BroadcastReceiver,并将其配置为使用 android.provider.Telephony.SMS_RECEIVED 的动作筛选器,这样每当手机 接收 文本时就会调用它。

是否有一些事件/操作或其他方式可以通知我的应用程序在手机 发送 文本时(最好是独立于发送文本的应用程序)进行通知?

到目前为止,我唯一看到的选择是轮询 content://sms/sent 的内容提供者,但这甚至不能给出所有已发送的文本,因为应用程序可以选择不将其放在那里。


由于发送短信的API(android.telephony.gsm.SmsManager)允许开发人员在发送成功或失败时指定自定义意图进行广播,因此我认为不可能监听单个“短信已发送”意图。 - Henning
嗨,约瑟夫,我想知道你在这方面有没有取得更多进展?目前我可以通过内容观察器监听发送的消息,但我希望能够阻止短信通过GSM/CDMA网络发送,并改为通过数据连接发送。你有什么见解可以阻止短信通过GSM/CDMA发送吗? - Donal Rafferty
1个回答

21

很不幸,目前没有办法实现一个BroadcastReceiver,因为标准短信应用程序使用SmsManger发送消息,但指定了具体的内部类用于发送和传送意图(分别是SmsReceiver.classMessageStatusReceiver.class)。虽然这并不能让你感到安慰,但你可以在短信应用程序的源代码中找到以下注释:

// TODO: Fix: It should not be necessary to
// specify the class in this intent.  Doing that
// unnecessarily limits customizability.

最好的替代方案似乎是轮询 content://sms/sent,可能使用ContentObserver


嗨,约瑟夫,我想知道你在这方面有没有取得更多进展?目前我可以通过内容观察器监听发送的消息,但我想阻止短信通过GSM/CDMA网络发送,改为通过数据连接发送。你有什么见解可以阻止短信通过GSM/CDMA发送吗? - Donal Rafferty
1
不好意思,我想阻止这条消息会更加棘手。如果我想到了什么,我会告诉你的。同时,你可以尝试在stackoverflow.com上提问;-) - Josef Pfleger
当然,ContentObserver 只与实际使用 SMS/MMS 内容存储的应用程序兼容。而一些消息应用程序(以及所有恶意应用程序)并不这样做。 - Phil Haigh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接