2014-05-19 122 views
1

我有一个使用BroadcastReceiver处理传入SMS消息的工作应用程序。我的问题是,在接收短信时做什么是最好的方式?目前我正在启动一个新线程来完成这项工作,如下面的BroadcastReceiver的onReceive()方法所示。在Android上进行SMS_RECEIVED工作的最佳方式是什么?

@Override 
public void onReceive(final Context ctx, Intent intent) { 
    if(intent.getAction().equals(ANDROID_SMS_DELIVER)) { 
     Bundle bundle = intent.getExtras(); 
     if (bundle != null){ 
      try{ 
       Object[] pdus = (Object[]) bundle.get("pdus"); 
       SmsMessage[] msgs = new SmsMessage[pdus.length]; 
       for(int i=0; i<msgs.length; i++){ 
        msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 
        final String smsFrom = msgs[i].getOriginatingAddress(); 
        final String smsBody = msgs[i].getMessageBody(); 

        // Launch a thread to do work on the SMS 
        new Thread() { 
         public void run() { 
          // Work.. 
         } 
        }.start(); 
       } 
      } catch(Exception e){} 
     } 
    } 
} 

这是最好的方法吗?或者,我是否应该将广播发送给其他IntentService来完成这项工作,或者这样做是否也会工作?

谢谢。

+0

BroadcastReceiver只会活x秒(我以为10),我不知道线程会发生什么。你可以轻松地尝试它,如果它的工作。但如果这是我的电话,我会使用IntentService:更清晰和定义的行为 – RvdK

回答

3

这不是这样做的方式! BroadcastReceiver只会活10秒(给予或带走)。我不知道你的线程会发生什么。

最好的办法是使用IntentService。此Service通过Intent启动/启动,完成后将自行关闭。

+0

'goAsync'调用会使我的实现可行吗? – worsnupd

+0

根据文档是的,我认为这也是可用的。这可从API 11(Android 3.0) – RvdK

相关问题