这是一个经常出现的问题,但我无法找到有关此主题的完整文档。
当使用kannel或其他设备使用默认参数发送时,我已经有一个能够拦截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
。
但就我的申请而言,短信不得出现在用户收件箱中。为此,kannel将SMS发送到特定端口。它已经在Blackberry上工作了,所以我猜问题的发送部分已经有效了。
也有可能通过其他方式实现这一目标,我需要实施此解决方案,以便与其他类似项目保持一致。另一个原因是,避免在每个收到的短信中解雇我的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
,而intent-filter应该仍然是functionalal。
但是,只要我指定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
?答案 0 :(得分:0)
我终于明白了什么是错的:
我正在将我的数据短信发送到为WAP-PUSH消息保留的端口2948。 因此android不会将这些消息广播到我的android.intent.action.DATA_SMS_RECEIVED接收器。使用不同的端口解决了这个问题。
此外,android似乎有8位编码SMS的问题(至少它会在日志中引发警告)。但是我的主要问题已经解决了。