简体   繁体   English

引导完成后,服务中的BroadcastReceiver无法正常工作

[英]BroadcastReceiver in Service is not working after boot completed

I am using a Service to listen for a broadcast after boot completed. 启动完成后,我正在使用服务来收听广播。 But the BroadcastReceiver is not registering when boot completed. 但是,启动完成后,BroadcastReceiver不会注册。 If instead of a Service I use a BroadcastReceiver to listen for boot completed it works. 如果我使用BroadcastReceiver代替Service来侦听引导完成,则它可以工作。 It doesn't when I register it with a Service. 当我向服务注册时没有。 What am I doing wrong? 我究竟做错了什么? Code is given below. 代码如下。

private BroadcastReceiver sim_change;
public void onCreate() {
    // TODO Auto-generated method stub
    super.onCreate();

    IntentFilter filter = new IntentFilter();
    filter.addAction(action);

    sim_change = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), "Boradcast Receiver registered successfully", Toast.LENGTH_LONG).show();

        }
    };

    registerReceiver(sim_change, filter);

}@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    unregisterReceiver(sim_change);
    Toast.makeText(getApplicationContext(), "Boradcast Receiver unregistered successfully", Toast.LENGTH_LONG).show();

}

You have to register for BOOT_COMPLETED in your Manifest. 您必须在清单中注册BOOT_COMPLETED It doesn't make sense to register for it from a Service, because the Service won't be running at boot in order to register for it. 从服务中注册它没有任何意义,因为该服务不会在启动时运行以进行注册。

You can't register for BOOT_COMPLETED from within a Service because the reboot removes that registration. 您无法从Service注册BOOT_COMPLETED ,因为重新启动会删除该注册。

You must do it from your BroadcastReceiver . 您必须从BroadcastReceiver执行此操作。

There are many ways to handle the enable/disable feature - either using the suggested setComponentEnabledSetting() , or just by storing a value in the app's shared preferences, which you can check when your service starts. 有多种处理启用/禁用功能的方法-使用建议的setComponentEnabledSetting() ,或仅通过将值存储在应用程序的共享首选项中,即可检查服务何时启动。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM