2016-11-13 4 views
0

로컬 방송 메시지에 익숙해졌습니다. 나는 2 가지 활동을하고있다.내 활동이 수신되지 않습니다. 다른 활동에서 보낸 로컬 방송을

MainActivity :

두 개의 버튼이 있습니다. 1 버튼을 클릭하면 메시지가 방송됩니다. 다른 하나를 클릭하면 두 번째 활동으로 이동합니다.

public class MainActivity extends AppCompatActivity { 

Button btn; 
    Button btn1; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     btn = (Button)findViewById(R.id.sendBroadCast); 
     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
        sendMessage(); 
      } 
     }); 
     btn1 = (Button)findViewById(R.id.btn); 
     btn1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent intent = new Intent(MainActivity.this,SecondActivity.class); 
       startActivity(intent); 
      } 
     }); 

    } 
    void sendMessage(){ 
     Log.d("RAK","Gonna send braodcast"); 
     Intent intent = new Intent("customMsg"); 
     intent.putExtra("message", "This is my message!"); 
     LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 
    } 
} 

두 번째 활동 :

이 활동에서 onCreate에서 수신기에 대한 등록.

public class SecondActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_second); 
     Log.d("RAK","In oncreate of second activity.Registered for local receiver"); 
     LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, 
       new IntentFilter("customMsg")); 

    } 
    private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      // Get extra data included in the Intent 
      String message = intent.getStringExtra("message"); 
      Log.d("receiver", "Got message: " + message); 
     } 
    }; 

    @Override 
    protected void onDestroy() { 
     LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver); 
     super.onDestroy(); 
    } 
} 

내가 직면 한 문제는 두 번째 활동이 방송을 수신하지 않는다는 것입니다. 도와주세요.

피플 :이 사본에 중복 표시하지 마십시오. 나는이 링크를 따라왔다 : how to use LocalBroadcastManager?

감사합니다, 케쉬를

두 번째 활동이 위로 첫 번째는 하드 될 것입니다 방송을 송신하는 동안 실행해야 방송을 수신 할 수 있도록
+0

어떻게 했습니까? 메시지를 보내시겠습니까? 내 말은, 먼저 앱을 실행하고 두 번째 버튼을 클릭 하시겠습니까? – Pein

+0

'btn1'을 클릭하면 돌아가서'btn'을 클릭하면 어떻게됩니까 ?? –

답변

2

당신의 사례 (2 개의 활동이 동시에 실행되지 않음).
첫 번째 활동이 방송을 보내지 만 활동 (두 번째 활동의 경우)이 시작되지 않아서 messgae가 '분실'됩니다.
예를 들어 서비스 내에서 브로드 캐스팅하여 테스트하고 두 번째 활동을 테스트 할 수 있습니다. 그런 다음 활동이이를 처리/수신 할 수 있습니다.

extraData를 사용하여 secondActivity에 문자열을 전달할 수 있습니다. BroadcastReceiver를 테스트하려면 브로드 캐스트를 보내는 서비스를 시도하십시오!

+0

거의 틀림없지 만 수신자를 oncreate에 등록하고 ondestroy에서 등록을 취소하면 방송을 백그라운드 활동으로 보낼 수있는 것보다 낫습니다. 하지만 그 전에 oncreate 메서드를 호출해야합니다. – Pein

+0

@Anto, 답장을 보내 주셔서 감사합니다. 그러나 나는 더 많은 설명이 필요하다. 두 활동을 동시에 실행할 수 없습니다. 액티비티가 로컬 브로드 캐스트를 보내는 것과 같은 상황이 있다고 해봅시다. 나는 여러 대의 수신기를 가지고있다.리시버는 Activity가 전송 한 로컬 브로드 캐스트를 수신하고 이에 따라 (무엇이든)해야합니다. 지역 방송으로 어떻게 이것을합니까? 2. 초기 활동에서 브로드 캐스트를 보내기 전에 SecondActivity (위의 예에서)를 시작한 경우 SecondActivity가이를 수신 했습니까? – Rakesh

0

문제는 브로드 캐스트 리시버를 두 번째 활동의 onCreate() 안에 등록한다는 것입니다. 즉, 두 번째 활동이 파괴되었을 때 등록을 취소하지 않는다는 것을 명심하기 전에 두 번째 활동이 이전에 시작된 상태 여야합니다. .

하여 수신기가 시스템 부팅시에 등록되어 있는지 확인하거나 정적으로 등록 :

대체 당신은

<receiver 
    android:name=".Receiver" 
    android:exported="false" > 
    <intent-filter> 
    <action android:name="customMsg" />    
    </intent-filter> 
</receiver> 

참고

public class Receiver extends BroadcastReceiver{ 
    public void onReceive(Context context, Intent intent) { 
    // Whatever 
    } 
} 

매니페스트 매니페스트 파일에 정적 수신기를 등록 할 수 있습니다 런타임에 응용 프로그램을 추가 할 때

+0

Android 매니페스트에 같은 것을 등록하면 Second Activity를 실행하지 않아도 SecondActivity가 로컬 방송을 수신합니까? – Rakesh

+0

예, 정적으로 등록한 경우 두 번째 활동을 시작할 필요가 없습니다. –