这是一个经常出现的问题,但我无法找到关于该主题的足够完整的文档。
当使用 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(我的接收器根本没有被触发)。经过一番研究,我发现了那些主题如何接收特定端口的短信......,如何发送和接收数据短信。有人说添加:
<data android:scheme="sms" />
<data android:port="1234" />
足以工作(不幸的是,它对我不起作用)。但是,根据文档(http://developer.android.com/guide/topics/manifest/data-element.html),您需要指定android:scheme
thenandroid: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
? - 是否有一个应用程序可以监听每个端口的短信,所以我可以确定测试短信是否正确发送(只是为了仔细检查这部分)?