2017-04-05 12 views
1

내 앱에서 브로드 캐스트 수신기를 사용하고 있습니다. 내 앱에는 많은 활동이 있습니다. 아래와 같이 MainActivity.java에 사용 broadcard 수신기 :앱의 모든 활동에 브로드 캐스트 리시버 사용하기

private BroadcastReceiver smsReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // Retrieves a map of extended data from the intent. 
     final Bundle bundle = intent.getExtras(); 
     try { 
      if (bundle != null) { 

      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
}; 

메시지가오고 및 MyActivity에 초점이 맞춰지면 내가 통지하고있다. 지금 내 다른 활동에 집중하면 알림을받지 못합니다. 글로벌 방식으로 BroadCast를 사용하는 일반적인 방법 ??? 모든 활동에 대해 ???

+0

이 수신기를 등록/등록 취소 하시겠습니까? – earthw0rmjim

+0

'manifest.xml'에 리시버를 등록 했습니까 –

+0

@ earthw0rmjim MainActivity의 OnREsume() 및 OnPause()를 등록하십시오. – AskingToStack

답변

3

의 자료/등록 취소를 등록 AbstractActivity라는 추상 액티비티. 다른 모든 활동이이 추상적 활동을 확장하도록하고 추상 활동으로 broadCastReceiver를 선언하십시오.

public AbstractActivity extends Activity{....} 

public SubActivity extends AbstractActivity{...} 

또는 당신은 EventBus를 사용할 수 있습니다

EventBus

전체 getting started guide을 읽어보십시오.

1

BroadCast를 글로벌 방식으로 사용하는 일반적인 방법이 있습니까?

당신은 등록해야합니다 귀하의 BroadcastReceiver 대신 특정 Activity

<receiver 
     android:name="com.example.android.NotificationReceiver" 
     android:permission="com.google.android.c2dm.permission.SEND" > 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <category android:name="com.example.android" /> 
     </intent-filter> 
    </receiver> 

두 번째 방법의에 : 이 BroadcastReceiver의 독립적 인 사용자 정의 클래스 확인하고 작성하는 모든 Activity

0

방송 수신자는 항상 방송 수신자의 등록을 취소합니다.

문제를 해결하려면 응용 프로그램 수준에서 브로드 캐스트를 등록해야합니다.

예 :

public MyApplication extends Application { 

onCreate() { 

// register broadcast receiver here 

} 

    private BroadcastReceiver smsReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      // Retrieves a map of extended data from the intent. 
      final Bundle bundle = intent.getExtras(); 
      try { 
       if (bundle != null) { 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }; 
    } 

당신이 어떤 시간에 어떤 작업을 수행 할 수 있습니다 그 후는 이제 응용 프로그램 수준에 수신기를 방송. 또한 작업 내에서 메모리 누수가 발생하지 않습니다.

+0

이것은 다른 해결책입니다 .. !! 고마워요 @jitesh 선생님 – AskingToStack