【发布时间】:2012-09-25 16:29:29
【问题描述】:
这是一个反复出现的问题,但我无法找到关于此主题的足够完整的文档。
当使用 kannel 或其他设备使用默认参数发送 SMS 时,我已经有一个能够拦截 SMS 的工作应用程序。我的清单如下所示:
<receiver
android:name=".sms.SMSListener"
android:enabled="true" >
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
它适用于android.provider.Telephony.SMS_RECEIVED 和android.intent.action.DATA_SMS_RECEIVED。
但对于我的应用程序而言,SMS 不得出现在用户收件箱中。为此,kannel 将 SMS 发送到特定端口。它已经在黑莓上运行,所以我猜问题的发送部分已经在运行。
也有可能通过其他方式实现这个目标,我需要实施这个解决方案才能与其他类似项目保持一致。另一个原因是避免我的BroadcastReceiver 在收到每条短信时被触发(因此需要解析每条收到的短信)。
但是,对于我当前的清单,我没有收到发送到特定端口的 SMS(我的接收器根本没有被触发)。经过一番研究,我发现了这些主题how to receive text sms to specific port..,How to send and receive data SMS messages。 有人说添加:
<data android:scheme="sms" />
<data android:port="1234" />
足以工作(不幸的是,它对我不起作用)。但是根据文档(http://developer.android.com/guide/topics/manifest/data-element.html),您需要指定android:scheme,然后指定android:host,以便考虑android:port。据我了解文档,您可以指定 android:scheme 并且意图过滤器应该仍然有效。
但是,一旦我指定android:scheme,我的BroadcastReceiver 就会停止工作,无论我是否使用特定端口发送短信:
<receiver
android:name=".sms.SMSListener"
android:enabled="true" >
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<data android:scheme="sms" />
</intent-filter>
</receiver>
所以我的问题如下:
- 是否有关于
android:scheme可以取哪个值的文档? -
android:host应该使用哪个值? - 是否有某个应用程序可以监听每个端口的 SMS,以便我可以确定测试 SMS 已正确发送(只是为了仔细检查这部分)?
【问题讨论】:
-
如果你想要端口寻址消息,那么你需要使用 android.intent.action.DATA_SMS_RECEIVED 而不是 android.provider.Telephony.SMS_RECEIVED。您提到的其中一个链接也有正确的使用方法
-
是的,没错,但它也不适用于 DATA_SMS_RECEIVED...
标签: android sms broadcastreceiver android-manifest intentfilter