2011-01-24 56 views
0

私は特定のポートでData SMSを受信したいAndroidアプリケーションを持っています。 SMSが私の電話に届くと、私のBroadcastReceiverのOnReceiveメソッドが呼び出されます。インテントを印刷すると、Log.i( "SMS Receiver:Received intent"、intent.toString());私は、Datamessageが特定のポートで受信したことがわかります。しかし、私がmsgs [i] .getMessageBody()。toString()を使うと、nullを返します。実際のメッセージは利用できません。私は送信者を十字でチェックしており、それは問題ありません。デバイス上でアプリケーションをアンインストールしてデータSMSを自分の電話に送信すると、SMSは受信トレイに送られ、電話ではメッセージは「サポートされていないコンテンツ」として表示されます。それは私が送るメッセージのフォーマットと関係がありますか?すべてのヘルプは高く評価されるだろう>Android:データSMSのメッセージがnullを返す

  <action android:name = "android.intent.action.DATA_SMS_RECEIVED"/> 
       <data android:scheme="sms"/> 
       <data android:host="localhost"/> 
       <data android:port="16000"/> 

     </intent-filter> 
    </receiver> 

</application> 
<uses-sdk android:minSdkVersion="4" /> 

- 以下 はデータSMS


を受信するために使用されるマニフェストエントリです。

+0

私のアプリケーションがインストールされると、MYデータSMSは受信トレイに送られません。私のアプリケーションのBroadcastReceivedがそれを受け取ることができますが、実際のメッセージはnullとして返すことを示しています。また、私はマニフェストでを持っています。 – chinnadurai

+0

誰もがこの問題に早く直面しましたか?誰かがなぜこのことが起こっているのか知っていますか? – chinnadurai

答えて

2

おそらく、メッセージテキストを取得するために 'getMessageBody()'を使用しました。しかしそれはテキストSMSのためです。データSMSの場合は、代わりに 'getUserData()を使用してメッセージ本文を取得する必要があります。 コードは次のようなものにしてください

Bundle bundle = intent.getExtras();   
SmsMessage[] msgs = null; 
if (bundle != null) 
{ 
    Object[] pdus = (Object[]) bundle.get("pdus"); 
    msgs = new SmsMessage[pdus.length];    
    for (int i=0; i<msgs.length; i++){ 
     msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);     
     byte[] userData = msgs[i].getUserData(); 
    } 

} 
関連する問題