在Android上接收二进制短信:动态接收器注册

时间:2012-05-09 14:57:55

标签: android binary sms intentfilter

我可以使用以下代码段在Android上发送和接收数据短信:

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中指定端口以动态注册接收器?

提前致谢。

2 个答案:

答案 0 :(得分:1)

我相信您需要使用addDataAuthority(String, String)。例如:

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

//use the filter, etc...

答案 1 :(得分:1)

由于我没有轻易找到,我在此发布:

字符串 "android.provider.Telephony.SMS_RECEIVED" 可以在Telephony.Sms.Intents类中找到为常量:

Telephony.Sms.Intents.DATA_SMS_RECEIVED_ACTION