1

次のコード スニペットを使用して、Android でデータ SMS を送受信できます。

SmsManager manager = SmsManager.getDefault();
manager.sendDataMessage(phonenumber, null, (short) PORT, data,piSend, piDelivered);

ここで、送信側の PORT=8091 です。レシーバーの場合、ブロードキャスト インテントはマニフェスト ファイルで次のように定義されます。

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

その後、DataSMSReceiver クラスで受信されます。

ただし、テキスト SMS の場合と同様に、ブロードキャスト レシーバーを動的に登録する必要があります。

protected static final String SMS_RECEIVED="android.provider.Telephony.SMS_RECEIVED";
getApplicationContext().registerReceiver(mReceiver, new IntentFilter(SMS_RECEIVED));

IntentFilter でポートを指定してレシーバーを動的に登録するにはどうすればよいですか?

前もって感謝します。

4

2 に答える 2

1

を使用する必要があると思いますaddDataAuthority(String, String)。例えば:

IntentFilter filter = new IntentFilter(SMS_RECIEVED);
filter.addDataAuthority("*", "8091");
filter.addDataScheme("sms");

//use the filter, etc...
于 2012-05-09T15:12:54.637 に答える
1

簡単に見つけられなかったので、ここに投稿します:

文字列 は、次のようにクラス"android.provider.Telephony.SMS_RECEIVED" で定数として見つけることができます。Telephony.Sms.Intents

Telephony.Sms.Intents.DATA_SMS_RECEIVED_ACTION

于 2015-02-28T06:56:30.150 に答える