2011-02-07 14 views
2

Nous avons actuellement une application qui envoie des SMS aux utilisateurs, il agit comme une passerelle SMS assis sur un téléphone Android.Android Historique SMS

J'ai rencontré beaucoup de questions sur la façon de lire des SMS, des fils de discussion de SMS etc., je me demandais s'il est possible de savoir à quel thread et à quel SMS d'entrée appartient.

Nous cherchons à automatiser où nous envoyons un SMS à l'utilisateur avec un ORDER ID, lorsque l'utilisateur répond nous aimerions savoir à quel thread le SMS appartient et essayer d'extraire l'ID de commande de ce SMS qui a initié le conversation.

Répondre

3

Vous pouvez trouver l'ID du fil avec le code ci-dessous. Mais il peut être encore mieux d'interroger tous les messages avec la même adresse et il est sortant (Sms.TYPE == 2 je pense). De cette façon, vous pouvez contourner le besoin de l'identifiant de thread, et commencer à chercher l'ID de commande en un seul coup.

import android.provider.Telephony.Sms; 
import android.provider.Telephony.Sms.Intents; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.database.Cursor; 
import android.telephony.SmsMessage; 

public class SmsReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals(Intents.SMS_RECEIVED_ACTION)){ 
      int threadId = 0; 
      SmsMessage[] messages = Intents.getMessagesFromIntent(intent); 

      String fromAddress = messages[0].getDisplayOriginatingAddress(); 

      Cursor c = Sms.query(context.getContentResolver(), 
           new String[]{Sms.THREAD_ID}, 
           Sms.ADDRESS+"="+fromAddress, 
           Sms.DATE+" DESC"); 
      if(c.moveToNext()){ 
       threadId = c.getInt(0); 
      } 

      c.close(); 

      if(threadId!=0){ 
       //query the Sms again, reading body for your Order ID, etc ... 
      } 
     } 
    } 
}