2011-02-07 3 views
2

В настоящее время у нас есть приложение, которое отправляет SMS пользователям, оно действует как шлюз SMS, сидящий на телефоне Android.История Android SMS

У меня возникло много вопросов о том, как читать SMS, потоки SMS и т. Д., Мне было интересно узнать, в какой поток и входящее SMS принадлежит.

Мы изучаем автоматическую отправку SMS-сообщения пользователю с идентификатором ORDER, когда пользователь отвечает назад, мы хотели бы выяснить, в какой поток принадлежит SMS, и попытаться извлечь идентификатор ORDER из этого SMS-сообщения, которое инициировало разговор.

ответ

3

Вы можете узнать идентификатор потока с помощью приведенного ниже кода. Но может быть даже лучше всего запросить все сообщения с тем же адресом, и он будет исходящим (Sms.TYPE == 2, я думаю). Таким образом, вы можете обойти необходимость в идентификаторе потока и просто начать поиск идентификатора заказа одним махом.

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 ... 
      } 
     } 
    } 
} 
Смежные вопросы