2012-07-13 5 views
1

글쎄, 나는 메시지를 듣고있는 broadcastreceiver를 확장하는 클래스가 있습니다. 이제 메시지를받을 때마다 내 앱의 새 인스턴스가 만들어집니다. 그래서 내가 그것을 닫을 때 나는 2 번 버튼을 뒤로 가야한다. 누구든지 나를 도울 수 있습니까?Android broadcastreceiver가 새 인스턴스를 만듭니다.

public class SMSReceiver extends BroadcastReceiver { 
public void onReceive(Context context, Intent intent) { 
    Bundle myBundle = intent.getExtras(); 
    SmsMessage [] messages = null; 
    String strMessage = ""; 
    String phoneNumber = ""; 

    if (myBundle != null) { 
     Object [] pdus = (Object[]) myBundle.get("pdus"); 
     messages = new SmsMessage[pdus.length]; 

     for (int i = 0; i < messages.length; i++) { 
      messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
      strMessage += "SMS From: " + messages[i].getOriginatingAddress(); 
      strMessage += " : "; 
      strMessage += messages[i].getMessageBody(); 
      strMessage += "\n"; 

      phoneNumber = messages[i].getDisplayOriginatingAddress(); 
     } 

     if (phoneNumber.equals("T-Mobile")) { 
      Toast.makeText(context, strMessage, Toast.LENGTH_SHORT).show(); 
      abortBroadcast(); 
     } 

    } 
} 
} 
+0

"새로운 인스턴스 생성"이란 무엇입니까? – Soham

+0

매니페스트를 게시하고 두 인스턴스로 설명하는 것을 확인하십시오. 정확한 동작을 설명하고 문제의 원인을 알려주십시오. –

답변

1

우선, 나는 앱의 새로운 인스턴스를 생성한다고 생각하지 않습니다. 일어날 가능성이 더 큰 것은 활동이 전면에 제기되고 있다는 것입니다. 제 생각에 당신은 매니 페스트를 보거나 게시하여 방송이 어떻게 진행되고 있는지 볼 수있을 것 같습니다. 방송의 목표 또한 활동을 시작하는 효과가있을 수 있습니다. 따라서 매니페스트를 확인하십시오. 브로드 캐스트 리시버에 아무 것도 없습니다. 마침내 안드로이드 OS에 이르기까지 그것이 언제 나타날지를 말한 것입니다. 그러나 두 가지 경우까지. 그게 바로 일어나지 않습니다.

추신. 정확한 이유는 모르겠지만 방송 재방송에서 Toast를 발급하지 말고 대신 startActivity()를 사용하여 활동과 통신하십시오.

+0

여기가 바로 pastebin입니다. http://pastebin.com/VmMtwyKs – BKovac

+0

방송 수신기에서 건배해야하는 이유가 있습니까? –

+0

일반적으로 브로드 캐스트 리시버를 사용하여 수행하는 작업은 활동을 시작하고 활동이 토스트 메시지를 전송하도록하는 것입니다. 액티비티에는 onStart() 및 onCreate() 메서드가 모두 있습니다. –

3

활동의 인스턴스가 현재 태스크의 맨 위에 이미 존재하는 경우, 시스템은 활동의 새 인스턴스를 작성하지 않고 onNewIntent() 메소드를 호출하여 해당 인스턴스에 인 텐트를 라우트합니다. 활동은 여러 번 인스턴스화 될 수 있으며 각 인스턴스는 서로 다른 타스크에 속할 수 있으며 한 태스크는 다중 인스턴스를 가질 수 있습니다 (단, 백 스택의 맨 위에있는 활동이 활동의 ​​기존 인스턴스가 아닌 경우).

세트 등

intent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP);

OR

intent.addFlags (Intent.FLAG_ACTIVITY_SINGLE_TOP);

활동의 여러 인스턴스를 방지하려면 다음을 수행하십시오. 감사합니다

여기에 대한 자세한 정보 및 지식은 여기를 참조하십시오 아주 좋은 블로그입니다.

+0

아직 진행 중입니다. 자, 무슨 일이 일어나고 있는지 말해 보자. 내 앱이 실행되고 메시지가 도착하면 창을 여는 것과 같은 애니메이션이 지나가고 마지막 창과 완전히 동일한 새 창에 내 축배가 있습니다. 이제 내가 다시 누르면 "열린"마지막 창을 종료하고 그 전에 하나를 입력하면 루트가 될 때까지, 응용 프로그램이 닫힙니다. – BKovac

+0

좋아요, onReceive가 시작될 때마다 기록했습니다. 그리고 새로운 "창"이 열리는 정확한 시간입니다. – BKovac

관련 문제