Android 如何在两个不同的端口接收数据sms
我有两个应用程序与两个不同的数据短信广播,我想在这两个接收数据短信。为此,我在每个应用程序中都创建了广播 应用程序1中的接收器1:Android 如何在两个不同的端口接收数据sms,android,android-intent,sms,broadcastreceiver,Android,Android Intent,Sms,Broadcastreceiver,我有两个应用程序与两个不同的数据短信广播,我想在这两个接收数据短信。为此,我在每个应用程序中都创建了广播 应用程序1中的接收器1: <receiver android:name=".SMSReceiver" > <intent-filter android:priority="10" > <action android:name="android.intent.action.DATA_SMS_RECEIVED
<receiver android:name=".SMSReceiver" >
<intent-filter android:priority="10" >
<action android:name="android.intent.action.DATA_SMS_RECEIVED" />
<data android:scheme="sms" />
<data android:port="5555" />
</intent-filter>
</receiver>
需要仔细检查的几件事: a) 您确定已在两个应用程序中添加了android.permission.RECEIVE_SMS权限吗 b) 您能否从两个清单中删除这一部分,以确保意向筛选不会出错
<data android:scheme="sms" />
<data android:port="5555" />
c) 如果b)可以工作,您可能有兴趣在接收器代码中进行过滤。要从其他端口接收sms,请在AndroidManifest.xml中设置此接收器
<receiver android:name=".SMSBcastReceiver">
<intent-filter android:priority="10">
<action android:name="android.intent.action.DATA_SMS_RECEIVED" />
<data android:scheme="sms" />
<data android:port="13013" />
</intent-filter>
</receiver>
然后在SMSBcastReceiver类中设置此选项
public class SMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle myBundle = intent.getExtras();
SmsMessage[] messages = null;
String strMessage = "";
byte[] data = null;
if (myBundle != null) {
Object[] pdus = (Object[]) myBundle.get("pdus");
messages = new SmsMessage[pdus.length];
for (int i = 0; i < messages.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
phoneNo = messages[i].getOriginatingAddress();
try {
data = messages[i].getUserData();
} catch (Exception e) {
}
if (data != null) {
for (int index = 0; index < data.length; ++index) {
strMessage += Character.toString((char) data[index]);
}
}
}
message = strMessage;
System.out.println("message received: " + message);
}
}
public void onReceive(final Context context, Intent intent) {
Bundle bundle = intent.getExtras();
Object messages[] = (Object[]) bundle.get("pdus");
SmsMessage smsMessage[] = new SmsMessage[messages.length];
for (int n = 0; n < messages.length; n++)
{
smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
}
smsOrigin = smsMessage[0].getDisplayOriginatingAddress();
smsData = smsMessage[0].getUserData();
for(int index=0; index<smsData.length; ++index)
{
smsBody += Character.toString((char)smsData[index]);
}
}
public void onReceive(最终上下文、意图){
Bundle=intent.getExtras();
对象消息[]=(对象[])bundle.get(“PDU”);
SmsMessage SmsMessage[]=新SmsMessage[messages.length];
对于(int n=0;n 对于(int index=0;indexI通过一个接一个地尝试这两种方法来识别我们必须放置标签才能接收短信。我目前正在做所有这些,但问题是我想运行两个短信广播接收器,我一个接一个地尝试了,效果很好,但它们不能同时运行。这是一个旧线程,但我对数据短信有一个问题。你能告诉我什么吗由于考虑了端口,它们是否确实会被防火墙阻止?
<receiver android:name=".SMSBcastReceiver">
<intent-filter android:priority="10">
<action android:name="android.intent.action.DATA_SMS_RECEIVED" />
<data android:scheme="sms" />
<data android:port="13013" />
</intent-filter>
</receiver>
public void onReceive(final Context context, Intent intent) {
Bundle bundle = intent.getExtras();
Object messages[] = (Object[]) bundle.get("pdus");
SmsMessage smsMessage[] = new SmsMessage[messages.length];
for (int n = 0; n < messages.length; n++)
{
smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
}
smsOrigin = smsMessage[0].getDisplayOriginatingAddress();
smsData = smsMessage[0].getUserData();
for(int index=0; index<smsData.length; ++index)
{
smsBody += Character.toString((char)smsData[index]);
}
}