2012-09-23 4 views
1

SMS를 수신하는 애플리케이션을 작성했습니다. 의 AndroidManifest.xml에서
내가 쓴 : 수신매니페스트의 수신기 닫기

 <receiver 
      android:name=".SmsReceiver"> 
      <intent-filter> 
       <action 
        android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
     </receiver> 

모든 SMS-ES는 클래스 SmsReceiver에 의해 분석된다.

클래스 SmsReceiver는 :

public class SmsReceiver extends BroadcastReceiver 
{ 
    private static final String SMS_RECEIVED = "com.example.remotecontrol.SMS_RECEIVED"; 
    private static final String SMS_CONTENT_KEY = "com.example.remotecontrol.SMS_CONTENT_KEY"; 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Bundle bundle = intent.getExtras(); 
     SmsMessage[] message = null; 
     String contentMessage = ""; 
     if(bundle != null) 
     { 
      Object[] pdus = (Object[]) bundle.get("pdus"); 
      message = new SmsMessage[pdus.length]; 
      for(int i=0; i<message.length; i++) 
      { 
       message[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
       contentMessage += "SMS from " + message[i].getOriginatingAddress() + ": "; 
       contentMessage += message[i].getMessageBody() + "\n"; 
      } 

      Toast.makeText(context, contentMessage, Toast.LENGTH_LONG).show(); 
     } 

     Intent intentSmsReceived = new Intent(); 
     intentSmsReceived.setAction(SMS_RECEIVED); 
     intentSmsReceived.putExtra(SMS_CONTENT_KEY, contentMessage); 
     context.sendBroadcast(intentSmsReceived); 

    } 

} 

는 SMS를 수신하고 프로그램에 의도를 보냅니다.

 registerReceiver(new BroadcastReceiver() 
     { 

      @Override 
      public void onReceive(Context context, Intent intent) 
      { 
       String contentMessage = intent.getExtras().getString(SMS_CONTENT_KEY); 
       Toast.makeText(context, contentMessage + "text", Toast.LENGTH_LONG).show(); 
       //TODO 
       //process SMS 

       unregisterReceiver(this); 
      } 

     }, new IntentFilter(SMS_RECEIVED)); 

코드의이 부분은 의도를 처리하고 SMS를 처리하고 응용 프로그램과 상호 작용합니다.

Android Manifest로 작성된 수신자를 등록 취소하는 방법은 무엇인가요? 그것은 모든 SMS-es를 처리합니다. 올바른 하나만 처리해야합니다.

답변

2

브로드 캐스트 리시버가 매니페스트에 지정된 경우 프로그래밍 방식으로 등록을 취소 할 수 없습니다. 매니페스트에서 가져와 코드 내에서 등록해야합니다.

다른 방법으로 등록 된 상태로두고 onReceive의 첫 번째 줄에 체크를 추가 할 수 있습니다. 부울 플래그를 통해 발생할 수 있습니다.

+0

답변 해 주셔서 감사합니다. :) – Pawel

관련 문제