2013-01-08 56 views
5

我有两个应用程序与两个不同的数据短信广播,我想在他们两个接收数据短信。对于我在应用1中创建广播中的每个应用如何在两个不同的端口接收数据短信

接收器之一:

<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> 

接收器两个应用程序二:

<receiver android:name=".SMSReceiver1" > 
      <intent-filter android:priority="10" > 
       <action android:name="android.intent.action.DATA_SMS_RECEIVED" /> 
       <data android:scheme="sms" /> 
       <data android:port="8901" /> 
      </intent-filter> 
    </receiver> 

现在的情况是这样的,短信在第一只收到我已经尝试了相同的端口,类名和不同的。但问题没有解决,我该如何解决? 这里是我的广播接收器类

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); 

    } 
} 

我发送消息

SmsManager smsManager = SmsManager.getDefault(); 
      smsManager.sendDataMessage(myNumber, null,(short)8901, sms.getBytes(), null, null); 
+0

这是一个古老的线程,但我有一个有关数据短信的问题。你能告诉我他们究竟是什么,并且可以被防火墙阻挡,因为考虑到了端口? – user1437328

回答

1

几件事情要仔细检查代码:

一)你确定你已经在这两个加android.permission.RECEIVE_SMS许可应用程序?

b)你可以从两个清单中删除这件作品,以确保意图过滤不会搞砸吗?

<data android:scheme="sms" /> 
<data android:port="5555" /> 

c)如果b)有效,您可能有兴趣在您的Receiver代码中进行过滤。

+0

我必须尝试b),但现在没有应用程序正在接收消息。 – Talha

+0

我认识到通过尝试一个一个,我们必须把标签接收短信 – Talha

1

从不同的端口接收的短信,在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 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]); 
} 
} 
+0

我目前正在做所有这一切,但问题是我想运行两个短信广播接收器,我完美地尝试了它,但它们都不能同时运行。 – Talha