2011-02-07 69 views
2

我们目前有一个应用程序向用户发送短信,它就像一个坐在Android手机上的短信网关。Android短信历史

我遇到了很多关于如何读取短信,短信线程等问题,我想知道是否有可能找出哪个线程和传入的短信属于。

我们正在考虑使用ORDER ID向用户发送SMS的自动化方式,当用户回复时我们想知道SMS属于哪个线程,并尝试从发起该SMS的SMS中提取ORDER ID会话。

回答

3

您可以通过下面的代码找出线程ID。但它可能会更好,只是查询所有消息具有相同的地址,它是出站(Sms.TYPE == 2我认为)。这样,您可以绕过线程ID的需要,并开始一次查找订单ID。

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