2014-05-19 3 views
1

들어오는 SMS 메시지를 처리하기 위해 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입니다. 이 ServiceIntent을 통해 시작/시작되며 완료되면 종료됩니다.

+0

'goAsync' 호출로 구현이 실용적으로 될까요? – worsnupd

+0

문서에 따르면 네,이 또한 사용할 수 있다고 생각합니다. API 11 (Android 3.0)에서 사용할 수 있습니다. – RvdK

관련 문제