Android:在库中注册接收器
我有一个库,其中包括一个名为Android:在库中注册接收器,android,broadcastreceiver,android-context,Android,Broadcastreceiver,Android Context,我有一个库,其中包括一个名为BaseActivity的活动和一个名为BaseRegister的接收器 BaseRegister扩展了BroadcastReceiver,它的动作是android.net.conn.CONNECTIVITY\u更改了和android.net.wifi.wifi\u STATE\u更改了,看起来像: public class BaseRegister extends BroadcastReceiver { @Override public void o
BaseActivity
的活动和一个名为BaseRegister
的接收器
BaseRegister
扩展了BroadcastReceiver
,它的动作是android.net.conn.CONNECTIVITY\u更改了和android.net.wifi.wifi\u STATE\u更改了
,看起来像:
public class BaseRegister extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if {
Log.d("onReceive", "Got it"); // Works
context.sendBroadcast(new Intent("some"));
else {
Log.d("onReceive", "Nope"); // Works
context.sendBroadcast(new Intent("stuff"));
}
}
}
根据Log
,AndroidManifest
也很好。下面是BaseActivity
的样子:
public class BaseActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
registerReceiver(applicationControl, new IntentFilter("some"));
registerReceiver(applicationControl, new IntentFilter("stuff"));
}
private BroadcastReceiver applicationControl = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.equals(new Intent("some"))) {
some();
} else if (intent.equals(new Intent("stuff"))) {
stuff();
}
}
};
public void some() { /** logging etc **/ }
public void stuff() { /** logging etc **/ }
}
在project中,我已经将此项目添加为库,没有问题。并创建了一个扩展BaseActivity
的活动。当CONNECTIVITY\u作为一个动作改变时,BaseRegister
由Android触发,但不需要活动。以下是我的项目的外观:
public class AnyActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void some() {
super.some();
Log.d("abc", "abc"); // not working
}
@Override
public void stuff() {
super.stuff();
Log.d("abc", "abc"); //not working
}
}
怎么了?我的方法是否不当或存在任何错误?任何帮助都很好。BaseActivity将调用范围内“最近”的方法,这是正常的核心Java行为,并非Android独有。如果您确实希望将BroadcastReceiver保留在基类中并向子类发送信号,那么您将需要类似于自定义侦听器的东西,即子类在运行时注册,并且当事件到达时将通知它们
此外,当活动不是堆栈顶部时禁用广播接收器被认为是一种良好的做法,因此您可能希望在onResume()/onPause()中使用registerReceiver()/unregisterReceiver()
祝你好运。为什么不在你的AndroidManifest中注册BroadcastReceiver?像这样:
<receiver android:name=".BaseRegister">
<intent-filter>
<action android:name="some" />
<action android:name="stuff" />
</intent-filter>
</receiver>
当您收到广播时,您的任何活动都处于活动状态吗。这实际上是我的问题。你是对的,如果我在儿童中注册,那就行了。所以没有办法在基类中注册。自定义侦听器呢?你能举个例子吗?你可以把BroadcastReceiver放在基类中,真正的问题是你现在不能给孩子们发信号。如何将register(Activity me)方法添加到您的基础中?在方法中保留一个子活动的ArrayList,事件到达时将调用该子活动。FWIW,除了重复的代码外,每个活动都有自己的广播接收器,这并没有任何真正的危害。