0

내가 애플리케이션 컨텍스트를 사용하여 내 activtiy과 서비스 방송을 만들기 위해 LocalBroadcastManager를 사용하고 A 활동에 방송을 수신하지 : LocalBroadcastManager이 같은

public class CommonForApp extends Application{ 
    public void broadcastUpdateUICommand(String[] updateFlags, 
       String[] flagValues) { 
      Intent intent = new Intent(UPDATE_UI_BROADCAST); 
      for (int i = 0; i < updateFlags.length; i++) { 
       intent.putExtra(updateFlags[i], flagValues[i]); 
      } 

      mLocalBroadcastManager = LocalBroadcastManager.getInstance(mContext); 
      mLocalBroadcastManager.sendBroadcast(intent); 

     }} 

지금 내 서비스에 리스너를 사용하여, 나는 broadcastUpdateUICommand을 (호출 오전)이 같은 :

public class mService extends Service { 
    public BuildNowPLaylistListListener buildCursorListener = new BuildNowPLaylistListListener() { 

      @Override 
      public void onServiceListReady() { 
    mApp.broadcastUpdateUICommand(
         new String[] { CommonForApp.INIT_DRAWER}, 
         new String[] {""}); 

      }}} 

그리고 난 이렇게 내 활동의 방송을 수신하고 있습니다 :

public class mActivity extends Activity{ 
    BroadcastReceiver mReceiver = new BroadcastReceiver() { 

      @Override 
      public void onReceive(Context context, Intent intent) { 
      mtoast.showtext("in onreceive"); //toast to check 

       if (intent.hasExtra(CommonForApp.INIT_DRAWER)) 
        initialiseDrawer(); 

    }}; 


} 

mApp는 Application의 인스턴스입니다. CommonForApp는 내 응용 프로그램 클래스입니다.

그러나 내 활동에서 브로드 캐스트를 수신하지 못했습니다 (브로드 캐스트 관리자는 응용 프로그램 컨텍스트를 사용하여 초기화 됨).

누구든지 내가 내 활동에서 방송을 수신하지 못하는 이유를 제안 할 수 있습니까? ..

. 미리 감사드립니다! 활동

+0

이유 ... Plz은 –

+0

인'당신이 브로드 캐스트를 보낼 때 Activity' 실행? Receiver에 'IntentFilter'를'Activity'에 등록하고 싶습니까? 또한 '서비스'에서 직접 방송하면 어떨까요? –

+0

활동중인 메시지의 등록은 어디에 있습니까? –

답변

3

:

protected BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, final Intent intent) { 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       if(intent.hasExtra("type")){ 
        // Do some action 
       } 
      } 
     }); 

    } 
}; 

@Override 
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) { 
    super.onCreate(savedInstanceState, persistentState); 
    LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, 
      new IntentFilter("data-loaded")); 
} 

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

는 다음 방송 전송 : downvote에 대한

public static void sendBroadcastMessageDataLoaded(Context context, String dataType){ 
    Intent intent = new Intent("data-loaded"); 
    intent.putExtra("type", dataType); 
    LocalBroadcastManager.getInstance(context).sendBroadcast(intent); 
} 
+0

BRoadcastreceiver aftersometime ... 이유가 무엇입니까? –

+0

메모리가 부족할 때 활동이 멈출 수 있습니다. –

+0

@developer I 내 서비스에 브로드 캐스트 리시버가 있고 일부 전화기에서 Android가 잠시 후 서비스를 중지한다는 사실을 알게되면 브로드 캐스트 리시버가 작동을 멈췄습니다./ –