1

これは繰り返しの質問ですが、このトピックに関する完全なドキュメントを見つけることができませんでした。

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_RECEIVEDandroid.intent.action.DATA_SMS_RECEIVEDます。

しかし、私のアプリケーションの目的上、SMS はユーザーの受信トレイに表示されてはなりません。そのために、kannel は SMS を特定のポートに送信しました。すでに Blackberry で動作しているので、問題の送信部分は既に動作していると思います。また、他の方法でこの目標を達成できる可能性があります。他の同様のプロジェクトとの一貫性を保つために、このソリューションを実装する必要があります。そのもう 1 つの理由は、BroadcastReceiver受信した SMS ごとに my が起動されないようにするためです (したがって、受信した SMS をそれぞれ解析する必要があります)。

ただし、現在のマニフェストでは、特定のポートに送信された SMS を受信しません (受信者はまったく起動しません)。いくつかの調査の後、特定のポートにテキスト SMS を受信する方法、データ SMS メッセージを送受信する方法などのトピックを見つけました。誰かが追加すると言う:

<data android:scheme="sms" />
<data android:port="1234" />

動作するのに十分です (残念ながら、私には動作しません)。ただし、ドキュメント ( http://developer.android.com/guide/topics/manifest/data-element.html ) によると、を考慮に入れるためにandroid:schemeを指定する必要があります。ドキュメントを理解している限り、指定するだけでインテントフィルターは機能するはずです。ただし、を指定するとすぐに、特定のポートで SMS を送信するかどうかに関係なく、動作しなくなります。android:hostandroid:portandroid:schemeandroid:schemeBroadcastReceiver

<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. SMSをすべてのポートでリッスンするアプリがどこかにあるので、テストSMSが正しく送信されていることを確認できます(この部分を再確認するためだけに)?
4

1 に答える 1

0

私はついに何が悪かったのか理解することができました:

WAP-PUSHメッセージ用に予約されているポート2948にデータSMSを送信していました。したがって、androidはそれらのメッセージをandroid.intent.action.DATA_SMS_RECEIVEDレシーバーにブロードキャストしません。別のポートを使用すると、問題が解決しました。

さらに、Androidは8ビットでエンコードされたSMSに問題があるようです(少なくともログに警告が表示されます)。しかし、私の主な問題は解決されました。

于 2012-10-02T11:58:02.220 に答える