【问题标题】:Broadcast receiver works only when device reboot android广播接收器仅在设备重启 android 时工作
【发布时间】:2013-12-21 03:07:50
【问题描述】:

您好,我正在开发 android 应用程序,我在其中定义了一个广播接收器。我正在从我的活动中调用接收器。我正在定义这样的广播接收器:

 public class MyScheduleReceiver extends BroadcastReceiver {

   private static final long REPEAT_TIME = 100 * 5;

  @Override
  public void onReceive(Context context, Intent intent) {
      Log.i("RRRRRRRRRRRRRRRRRRRRRRRR", "on receive");

  }
} 

在 android manifest 文件中我是这样定义的:

 <receiver android:name="abc.xyz.MyScheduleReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver> 

在主要活动中,我这样称呼我的广播接收器:

//in activity oncreate 
startService(new Intent(this, MyScheduleReceiver.class));

我的问题是,当调用启动服务时,它实际上并没有启动我的服务。但是当我重新启动设备时,它会启动我的服务,因为我给了意图过滤器“BOOT_COMPLETED”。当我调用 start service 我的服务必须启动时,我实际上想要做什么,

我是不是做错了什么。如何解决这个问题?

【问题讨论】:

    标签: android broadcastreceiver intentfilter bootcompleted


    【解决方案1】:

    这里发生的实际情况是,您可以在启动活动时盯着广播接收器,并且该广播接收器开始侦听 BOOT_COMPLEATED 是否发生。当发生这种情况时,它涉及到 onreceive 。如果您需要在后台启动一个进程,您可以使用广播接收器的服务。 BroadcastRecievers 用于监听一些事件的发生。通过这个,它会帮助你

    Services

    BroadcastReceiver

    【讨论】:

      【解决方案2】:

      您要么感到困惑,要么您的问题措辞不当。您的清单(以及 Android 通常如何工作)中的内容是,当 BOOT_COMPLETED 发生时,它将调用您定义的 BroadcastReceiver。它不会自动启动活动或服务。如果你想这样做,你需要在接收者的 onReceive 函数中调用 startService 或 startActivity。

      您没有启动 BroadcastReceivers。您启动服务,这些服务是长期后台进程。您注册 BroadcastReceivers 以了解特殊事件(如 BOOT_COMPLETED)。当您注册的事件之一发生时,它将创建该类的一个实例并调用其 onReceive。

      希望这可以解决问题。如果没有,我建议你重读一些关于服务和广播接收器的教程,你似乎把两者混淆了。

      【讨论】:

        【解决方案3】:

        startService 调用只会启动一个服务。这里的 MyScheduleReceiver 是一个广播接收器。要触发广播接收器,您通常必须发送广播而不是调用 startService。

        【讨论】:

          【解决方案4】:

          要开始广播,您需要发送广播而不是startService()

          添加这个而不是startService(new Intent(this, MyScheduleReceiver.class));

          Intent intent = new Intent();
          intent.setAction("pakagename.MyScheduleReceiver");
          sendBroadcast(intent); 
          

          希望对你有帮助。

          【讨论】:

            猜你喜欢
            • 2017-05-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多