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 类中接收。

但是,我需要像注册短信一样动态注册广播接收器,例如:

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

由于我没有很容易找到它,所以我在这里发布:

String "android.provider.Telephony.SMS_RECEIVED" 可以在Telephony.Sms.Intents类中作为常量找到:

Telephony.Sms.Intents.DATA_SMS_RECEIVED_ACTION

于 2015-02-28T06:56:30.150 回答