2013-01-08 62 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