2010-09-21 6 views
8

J'ai trouvé quelques tutoriels sur la façon d'envoyer/recevoir des SMS, mais aucun sur l'envoi et la réception de messages SMS. J'ai une très petite quantité de données que j'aimerais que les utilisateurs de mon application puissent partager.Comment envoyer et recevoir des données Messages SMS

Je peux envoyer, mais mon BroadcastReceiver ne s'appelle jamais. Il semble que ce soit un problème connu (http://code.google.com/p/android/issues/detail?id=1576) mais quelqu'un a-t-il déjà compris comment le faire?

J'ai essayé d'envoyer/recevoir un SMS et cela fonctionne très bien, la chose est, j'ai besoin de spécifier un port pour que mon application puisse écouter le SMS.


Il semble que cette question a été posée ici avant et n'a jamais été répondu: how to receive text sms to specific port..

+0

Je suis en train de faire quelque chose de similaire ICI !!! http://stackoverflow.com/questions/14452808/sending-and-receiving-mms-in-android – toobsco42

Répondre

23

Je sais que cela 1 an au moment de ma réponse, mais je pense qu'il pourrait encore aider quelqu'un.
Réception:

Bundle bundle = intent.getExtras(); 

      String recMsgString = "";    
      String fromAddress = ""; 
      SmsMessage recMsg = null; 
      byte[] data = null; 
      if (bundle != null) 
      { 
       //---retrieve the SMS message received--- 
       Object[] pdus = (Object[]) bundle.get("pdus"); 
       for (int i=0; i<pdus.length; i++){ 
        recMsg = SmsMessage.createFromPdu((byte[])pdus[i]); 

        try { 
         data = recMsg.getUserData(); 
        } catch (Exception e){ 

        } 
        if (data!=null){ 
         for(int index=0; index<data.length; ++index) 
         { 
           recMsgString += Character.toString((char)data[index]); 
         } 
        } 

        fromAddress = recMsg.getOriginatingAddress(); 
       } 

Mise en place du récepteur dans Manifest:

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

Envoi:

String messageText = "message!"; 
short SMS_PORT = 8901; //you can use a different port if you'd like. I believe it just has to be an int value. 
SmsManager smsManager = SmsManager.getDefault(); 
smsManager.sendDataMessage("8675309", null, SMS_PORT, messageText.getBytes(), null, null); 
+0

Mec c'est génial, merci. –

+1

Je suis content que je puisse vous aider. Vous êtes les bienvenus. – Jakar

+1

+1 pour la référence Tommy Tutone –