2012-05-06 10 views
3

特定のポートでSMSを受信するアプリを実装します。アンドロイドSMSポートについて

マニフェストコード:以下

<receiver android:name=".BinarySMSReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.DATA_SMS_RECEIVED"/> 
     <data android:port="8091"/> 
     <data android:scheme="sms"/> 
    </intent-filter> 
</receiver> 

とレシーバのクラスコード。

public class BinarySMSReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Bundle bundle = intent.getExtras();   
     SmsMessage[] msgs = null; 

     if(null != bundle) 
     { 
      String info = "Binary SMS from "; 
      Object[] pdus = (Object[]) bundle.get("pdus"); 
      msgs = new SmsMessage[pdus.length]; 
      byte[] data = null; 

      for (int i=0; i<msgs.length; i++){ 
       msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);     
       info += msgs[i].getOriginatingAddress();      
       info += "\n*****BINARY MESSAGE*****\n"; 

       data = msgs[i].getUserData(); 

       for(int index=0; index<data.length; ++index) 
       { 
        info += Character.toString((char)data[index]); 
       } 
      } 

      Toast.makeText(context, info, Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

私はこの(8091)ポートかにあるすべてのSMSを取得しています。ポート固有のメッセージだけを受信したい

答えて

2

私はちょうどあなたの「onReceive」コードの開始時に次のチェック条件を追加し、同様の問題があった:アプリはちょうど他のポートに向けたデータSMSを受信して​​いない理由は、まだ不思議に思っている人のために

String dataStr = intent.getDataString(); 
if (dataStr.indexOf(":8888") == -1) { 
    return; 
} 
10

問題はマニフェストコードにあります。私は投稿された多くのソリューションを見てきましたが、そのほとんどは実際には間違っています。

マニフェストは次のようになります

<receiver 
    android:name = ".SmsReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.DATA_SMS_RECEIVED" /> 
     <data 
      android:scheme="sms" 
      android:host="*" 
      android:port="8095" /> 
     </intent-filter> 
</receiver> 

スキーム、ホストおよびポート属性が意図フィルタの唯一の「データ」エレメントではなく、別個の「データ」エレメントに定義されなければなりません。

もこのlinkから、「データテスト」セクションでは
「は、ホストが指定されていない場合、ポートは無視される。ホストおよびポートが一緒にURIの権限を構成している」と述べていないこと
したがって、特定のポートにのみデータSMSを受信させる場合は、ホストを指定する必要があります。

「ホスト」要素である*(アスタリスク)は、これは誰かを(助け、それは

希望するすべてのホスト/電話番号からのデータSMSを受け入れることを指定することです

関連する問題