11.2. BootReceiver

优质
小牛编辑
128浏览
2023-12-01

11.2.BootReceiver

在Yamba中,UpdaterService负责在后台定期抓取数据。但现在只能在打开应用之后,让用户在菜单中选择Start Service手工启动它才会开始执行。这样显然是不友好的。

如果能让UpdaterService随着系统启动而自动启动,那就可以省去用户的手工操作了。为此,我们将新建一个Broadcast Receiver用以响应系统启动的事件,即BootReceiver,并由它负责启动UpdaterService。BootReciever的代码只有如下几行:

例 11.1. BootReceiver.java

package com.marakana.yamba6;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.util.Log;

public class BootReceiver extends BroadcastReceiver { //

@Override

public void onReceive(Context context, Intent intent) { //

context.startService(new Intent(context, UpdaterService.class)); //

Log.d("BootReceiver", "onReceived");

}

}

  1. BootReceiver继承自BroadcastReceiver,它是所有Receiver的基类。
  2. 我们只需实现一个方法,那就是onReceive()。它将在收到符合过滤规则的Intent时触发。
  3. 通过Intent启动UpdaterService。onReceive()在触发时可以得到一个Context对象,我们将它原样传给UpdaterService。对现在的UpdaterService而言,这个Context对象并不是必需的,但稍后我们就能够发现它的重要性。

到这里,我们已经实现了BootReceiver,但还没有将它注册到系统,因此仍无法响应来自系统的事件。

最后更新:

类似资料

  • 13.4.3.修改BootReceiver 回忆下前面的"BootReceiver"一节。BootReceiver在设备开机时唤醒,先前我们利用这一特性,在这里启动UpdaterService,而UpdaterService将一直处于运行状态。但是到现在,UpdaterService会一次性退出,这样已经不再适用了。 适用的是,使用Alarm服务定时发送Intent启动UpdaterService

  • 11.2.2.测试 BootReceiver 接下来重启设备。重启之后若一切正常,UpdaterService就应该处于运行状态了。你可以通过LogCat的输出来检查它是否启动成功,也可以通过System Settings检查它是否存在于当前正在运行的Service列表。 要使用System Settings,可以回到主屏幕,点击菜单按钮,选择Settings→Applications→Runni

  • 11.2.1.将BootReceiver注册到Manifest文件 要将BootReceiver注册到系统,我们需要在Manifest文件中添加它的声明,还需要定义它的intent-filter,用以过滤出自己关心的事件。 例 11.2. AndroidManifest.xml: 在<application>标签之下 ... <receiver android:name=".BootReceive

  • 我一直在努力克服Boot_complete接收器不能在某些设备中工作的问题。 比如Vivo设备,它们有iManager应用程序和自动启动管理器。用户可以在设备启动时从自动启动切换应用程序。 我应该使用什么连同下面的意图过滤器重新启动我的服务后,设备重新启动。

相关阅读