2016-07-26 127 views
2

定义我在我的应用程序一个BroadcastReceiver了`BroadcastReceiver`实例,它是在AndroidManifest.xml定义如下:如何获得它在`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(); 
    } 

} 

当接收器有一个意向,我会做一些一般的东西首先,像保存数据...

但如果指定的活动我显示给用户,我需要改变活动的意见,所以我使用ReceiverListener来做到这一点。将收听者设置为onCreate中的MyTaskReceiver,并在onDestroy中设置null

然后出现一个问题,如何获取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,但我的接收器不依赖于特殊活动,我需要它在应用程序运行时运行而不是活动正在运行。并且谢谢:) –