1

这是一个经常出现的问题,但我无法找到关于该主题的足够完整的文档。

当使用 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_RECEIVEDandroid.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:schemethenandroid: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>

所以我的问题如下:

  1. android:scheme是否有关于可以采取哪些价值的文件?
  2. 我应该使用哪个值android:host
  3. 是否有一个应用程序可以监听每个端口的短信,所以我可以确定测试短信是否正确发送(只是为了仔细检查这部分)?
4

1 回答 1

0

我终于设法理解出了什么问题:

我正在将我的数据短信发送到为 WAP-PUSH 消息保留的端口 2948。所以 android 不会将这些消息广播到我的 android.intent.action.DATA_SMS_RECEIVED 接收器。使用不同的端口解决了这个问题。

此外,android 似乎对 8 位编码的 SMS 有问题(至少它会在日志中发出警告。)。不过我的主要问题已经解决了。

于 2012-10-02T11:58:02.220 回答