android - 当用户开始使用android设备时如何启动后台服务?

标签 android android-service

我已经实现了一项 Android 服务 (START_STICKY),它在设备启动时启动并在后台运行。此服务的功能是与 SD 卡交互。由于它连续运行,从粘性开始它会消耗电池。为了解决电池消耗过多的问题,我想在用户使用设备时启动此服务。

理想情况下,根据 ACTION_SCREEN_ONACTION_SCREEN_OFF Intent 启动/停止服务。

当我测试它时发现我无法在 list 中注册 ACTION_SCREEN_OFFACTION_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/

相关文章:

android - Firebase google-services.json 更改不再接收推送通知

java - 将字符串发送到 RecyclerViewHolder 中的 onClick

java - 在 Android 中创建秒表计时器

android - 如何在 Jetpack Compose 的 TextField 中正确设置高度?

Android 服务 - 从设置 App 停止服务

android - 当操作系统由于 Sticky 标志重新启动 android 服务时,是否将 Intent 传递给它?

java - Android 创建一个没有 PreferenceActivity 的 PreferenceFragment

java - 我如何知道我的服务何时从广播接收器与 Android 调用?

android - 当应用或服务崩溃时,是否有一些API(或方法)用于获取日志?

android - 在全局流程中服务而不是被创造