如何获取在`AndroidManifest.xml`中定义的`BroadcastReceiver`实例

L. *_*ter 3 android broadcastreceiver android-broadcastreceiver

BroadcastReceiver我的应用程序中有一个,其定义AndroidManifest.xml如下:

<receiver android:name=".receiver.MyTaskReceiver">
    <intent-filter>
        <action android:name="xxx.xxx.xxx" />
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

这是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();
    }

} 
Run Code Online (Sandbox Code Playgroud)

当接收者有意图时,我会先做一些一般的事情,比如保存数据...

但是如果向用户显示指定的活动,我需要更改活动的视图,因此我使用它ReceiverListener来执行此操作.设置一个监听器MyTaskReceiver中onCreate,并设置null在onDestroy.

然后是一个问题,如何获取实例,MyTaskReceiver以便我可以设置一个监听器呢?

或者还有其他方法可以实现我想要的吗?

谢谢.

Nat*_*lia 5

您可以在活动中注册接收器,如下所示:

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
    }
};
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!:)

并记得取消注册您的接收器(例如onDestroy())

unregisterReceiver(this.broadcastReceiver);
Run Code Online (Sandbox Code Playgroud)