我可以使用以下代码段在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中指定端口以动态注册接收器?
提前致谢。
答案 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