2016-07-26 5 views
2

`で定義されている` BroadcastReceiver`インスタンスを取得するには、それは以下のようにAndroidManifest.xmlで定義されていた方法:私は私のアプリで<code>BroadcastReceiver</code>を持ってAndroidManifest.xml`

<receiver android:name=".receiver.MyTaskReceiver"> 
    <intent-filter> 
     <action android:name="xxx.xxx.xxx" /> 
    </intent-filter> 
</receiver> 

これはMyTaskReceiverコードです:受信機が意図を得たとき、私はセーブデータのように、最初のいくつかの一般的な事柄を行います

public class MyTaskReceiver extends BroadcastReceiver { 

    private ReceiverListener listener ; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     //do general things 

     if(listener != null) { 
      listener.received(); //do special things if the listener is setted up. 
     } 
    } 

    public void setListener(ReceiverListener listener) { 
     this.listener = listener; 
    } 

    public interface ReceiverListener { 
     void received(); 
    } 

} 

...

しかし、もし指定されたアクティビティのI私はアクティビティのビューを変更する必要があるので、これを行うにはReceiverListenerを使用します。リスナーをに設定してonCreateに設定し、nullonDestroyに設定します。

ここで問題が発生します。MyTaskReceiverのインスタンスを取得して、リスナーを設定する方法はありますか。

または、私が欲しいものを達成するための他の方法はありますか?

ありがとうございました。

+0

それはマニフェストファイルで定義されているときは、受信機への参照を必要としません。あなたのBroadcastReceiverクラスのインテントを処理してください。 – Talha

+1

残念ながら、これは受信者の仕組みではありません。インスタンスが作成され、 'intent'が' onReceived'に渡されて破棄されます。リスナーを登録することはできません。 @Nataliaの答えを見てみましょう。それはあなたが探しているもののようです。 – Budius

+0

@Budiusあなたのコメントは私が欲しい答えです、ありがとうございます。 –

答えて

4

あなたはこのようなあなたの活動に受信機を登録することができます。

private void registerBroadcastReceiver() { 
    IntentFilter intentFilter = new IntentFilter(); 
    intentFilter.addAction(xxx.xxx.xxx); 
    registerReceiver(this.broadcastReceiver, intentFilter); 
} 

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle extras = intent.getExtras(); 
     //do whatever need to be done 
    } 
}; 

はそれが役に立てば幸い! :)

そして(onDestroy()、例えば)あなたの受信機の登録を解除することを忘れないでください

unregisterReceiver(this.broadcastReceiver); 
+1

私はアクティビティでBroadcastReceiverを登録できますが、受信者は特別なアクティビティに依存していないことがわかります。アプリが動作しているときにアクティビティが動作していないときに動作する必要があります。そして、とにかく感謝:) –

関連する問題