2010-08-06 4 views
0

이 코드를 내 Dell Streak에서 작동 시키려고하고 있지만 SMS를 받으면 나는 여전히 Toast 알림을받지 못합니다 ... '수신'태그를 manifest.xml 파일을 ... 나는이에 완전한 멍청한 놈 오전 시작 : 당신은 비 UI 구성 요소에서 Toast의를 작성해서는 안Android + SMS 수신자 + 토스트 = FAIL

package net.learn2develop.SMSMessaging; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.SmsMessage; 
import android.widget.Toast; 

public class SMSReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     //---get the SMS message passed in--- 
     Bundle bundle = intent.getExtras();  
     SmsMessage[] msgs = null; 
     String str = "";   
     if (bundle != null) 
     { 
      //---retrieve the SMS message received--- 
      Object[] pdus = (Object[]) bundle.get("pdus"); 
      msgs = new SmsMessage[pdus.length];   
      for (int i=0; i<msgs.length; i++){ 
       msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);    
       str += "SMS from " + msgs[i].getOriginatingAddress();      
       str += " :"; 
       str += msgs[i].getMessageBody().toString(); 
       str += "\n";  
      } 
      //---display the new SMS message--- 
      Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); 
     }       
    } 
} 

답변

1

약간의 도움이 필요합니다. 에서 Toast 초를 만들어야합니다. Toast이 표시되지 않는 이유는 BroadcastReceiverLooperToast 인 스레드에서 실행되고 있지 않고 UI 스레드에 대한 설정이 필요한 이유 때문입니다. Notifications은 비 UI 구성 요소가 사용자에게 알리기위한 것입니다.