2013-01-08 12 views
5

Ho due applicazioni con due diversi sms di dati trasmessi e voglio ricevere sms di dati in entrambi. Per questo ho creato la trasmissione in ogni appCome ricevere sms di dati in due porte diverse

ricevitore uno in App 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> 

ricevitore due in applicazione due:

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

Ora lo scenario è questo, sms ricevuto solo in prima app installata, ho provato con le stesse porte, il nome della classe e anche con diversi. Ma il problema non è risolto, come posso risolverlo ?? Qui è la mia trasmissione classe ricevitore

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

    } 
} 

e il mio codice per l'invio di un messaggio

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

Questo è un vecchio thread, ma ho un domanda riguardante i dati sms. Potresti dirmi cosa sono esattamente e potrebbero essere bloccati da un firewall in considerazione delle porte? – user1437328

risposta

1

paio di cose da doppio controllo:

a) Sei sicuro di aver aggiunto android.permission.RECEIVE_SMS autorizzazione sia applicazioni?

b) Si può rimuovere questo pezzo da entrambi i manifesti per assicurarsi che il filtro di intenti non si rovini?

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

c) Se b) funzionerà, si potrebbe essere interessati a fare il filtraggio nel codice del ricevitore.

+0

Devo provare b) ma ora nessuna app sta ricevendo messaggi. – Talha

+0

Riconosco provandoci entrambi uno ad uno che dobbiamo mettere tag per ricevere sms – Talha

1

ricevere SMS da una porta diversa, impostare il ricevitore nella vostra 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> 

quindi impostare questo nella tua classe 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

Attualmente sto facendo tutto questo ma il problema è che voglio eseguire due sms broadcast receiver, I l'ho provato uno per uno perfettamente, ma entrambi non funzionano contemporaneamente. – Talha

Problemi correlati