我已经实现了一项 Android 服务 (START_STICKY
),它在设备启动时启动并在后台运行。此服务的功能是与 SD 卡交互。由于它连续运行,从粘性开始它会消耗电池。为了解决电池消耗过多的问题,我想在用户使用设备时启动此服务。
理想情况下,根据 ACTION_SCREEN_ON
和 ACTION_SCREEN_OFF
Intent 启动/停止服务。
当我测试它时发现我无法在 list 中注册 ACTION_SCREEN_OFF
和 ACTION_SCREEN_ON
,所以我在我的服务中创建了一个广播接收器来捕获ACTION_SCREEN_OFF
& ACTION_SCREEN_ON
。
但是,由于我无法在 list 中注册 Intent ,所以当我在 ACTION_SCREEN_OFF
上停止服务时。我怎么可能在屏幕重新亮起时启动它?
注意:
正如我已经提到的,SCREEN_ON
+ SCREEN_OFF
不能在 list 文件中注册。它被注册为
// REGISTER RECEIVER THAT HANDLES SCREEN ON AND SCREEN OFF LOGIC
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
broadcastReceiver = new TestReceiver();
registerReceiver(broadcastReceiver, filter);
因此,当服务未运行时,此 Intent 将不会触发。
最佳答案
您可以使用 BroadCastReciever 根据广播类型调用您的服务
public class MyReceiver extends BroadcastReceiver {
public static boolean wasScreenOn = true;
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
// do whatever you need to do here
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
// and do whatever you need to do here
}
else if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED))
{
// and do whatever you need to do here
}
}
关于android - 当用户开始使用android设备时如何启动后台服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19294612/