2017-04-05 8 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

BroadcastReceiverの独立したカスタムクラスを作成し、ベースに/登録解除を登録 AbstractActivityと呼ばれる抽象アクティビティ他のすべてのアクティビティでこの抽象アクティビティを拡張し、broadCastReceiverを抽象アクティビティで宣言します。

public AbstractActivity extends Activity{....} 

public SubActivity extends AbstractActivity{...} 

それとも、EventBusを使用することができます。

EventBus

がフルgetting started guideを読みます。

1

BroadCastをグローバルに使用する一般的な方法はありますか?

代わり

<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> 

Activity特定の第二の方法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

関連する問題