BaseRegister扩展了broadcastReceiver,它的动作是android.net.conn.CONNECTIVITY_CHANGE和androID.net.wifi.WIFI_STATE_CHANGED,它看起来像:
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 **/ }}
在项目中,我已经将这个项目添加为库,没问题.并创建了一个扩展BaseActivity的Activity.当CONNECTIVITY_CHANGE作为动作时,由AndroID触发BaseRegister,但没有调用Activity.以下是我的项目的外观:
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保留在基类中并发信号通知孩子,那么你将需要类似@R_301_6942@监听器的东西,即子节点在运行时注册,当事件到达时,它们将被通知.此外,当Activity不在堆栈顶部时,被认为是禁用广播接收器的好习惯,因此您可能希望在onResume()/ onPause()中使用registerReceiver()/ unregisterReceiver()
祝好运.
总结以上是内存溢出为你收集整理的Android:在库中注册接收器全部内容,希望文章能够帮你解决Android:在库中注册接收器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)