Android:在库中注册接收器

Android:在库中注册接收器,第1张

概述我有一个库,其中包含一个名为BaseActivity的活动和一个名为BaseRegister的接收器. BaseRegister扩展了BroadcastReceiver,它的动作是android.net.conn.CONNECTIVITY_CHANGE和android.net.wifi.WIFI_STATE_CHANGED,它看起来像: public class BaseRegister exte 我有一个库,其中包含一个名为BaseActivity的活动和一个名为BaseRegister的接收器.

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:在库中注册接收器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1125243.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存