2016-06-13 14 views
0

イベントの発生時にアクションをブロードキャストするSDKをコーディングしています。AndroidのSDKデザインでイベントをブロードキャストする

イベントはバックグラウンドサービスでキャプチャされます。

ここには3つのオプションがあります。

  1. グローバルにインテントをブロードキャストします。
  2. ローカルでインテントをブロードキャストします。
  3. 使用setComponent

まず 最初のアプローチの問題は、携帯電話がSDKを持つ2つの以上のアプリを持っている場合、それは突然行動を開始し、問題を引き起こすということです。 オプション1は省略されています。

第2の ローカルブロードキャストは、コードを介して、すなわちアクティビティを使用して登録する必要があります。 この方法の問題は、アプリが強制終了されたか実行されていない場合、私はイベントを受け取ることができなくなるということです。

第3の setComponentで小さなPOCを実行しましたが、ブロードキャストイベントを受信できません。ブロードキャストレシーバは、マニフェストファイルで受信として登録されます。

ボトムラインでは、私のイベントはバックグラウンドサービスから生成され、実行中または一時停止中のアプリケーションに関係なく、これらのイベントをアプリで受け取れるようにする必要があります。

+0

"この方法の問題は、アプリケーションが強制終了されたか実行されていない場合、私はイベントを受け取ることができなくなります" - アプリケーションが強制終了されたか実行されていない場合、イベントはありません。 – CommonsWare

+0

@ CommonSWare、あなたはあなたのアプリを殺すか、アプリが実行されていない場合、あなたのサービスを稼働させることができます。 –

+0

サービスはアプリの一部であるため、サービスを含むアプリが実行されていない場合、サービスは実行されていません。 *アクティビティ*が実行されていないときにサービスが実行されている可能性がありますが、アクティビティ!=アプリケーションです。 – CommonsWare

答えて

2

あなたは第四を持っており、最善の選択肢かもしれない:EventBusを使用しています。

EventBus.getDefault().register(this); 

// This method will be called when a SomePojoClass instance is is posted 
@Subscribe 
public void onEvent(SomePojoClass event){ 
    Toast.makeText(getActivity(), event.getMessage(), Toast.LENGTH_SHORT).show(); 
} 

ちょうどそのシンプル:

enter image description here

EventBus.getDefault().post(new SomePojoClass("Hello EventBus!”); 

がメッセージを受信するには(任意のPOJOクラスのインスタンスであることができる)メッセージを送信するには!

+0

イベントバスは、API 11以降、つまりAndroid 2.3未満のAndroidバージョンで使用できますか? –

+0

@VaibhavRanglani、APIレベルに関する制約はありませんでした。リンクを介してそれをダブルチェックするか、自分でgoogleしてください。 – David

+0

EventBusはAndroid SDKのクラスではないようです。あなたは、その一部である図書館を指摘してください。ありがとう! –

関連する問題