首页 > 解决方案 > SDK 中的 Android 服务问题 >= 26

问题描述

我正在创建一个应用程序,即使应用程序从进程中或在后台被终止,它也会向用户发送通知。实际上,在 SDK >= 26 的 Android 版本中,我使用的是前台服务。为了显示通知,我有一个服务 (DatasNotification),它启动一个 asyncTask (HttpRequest) 以发出 http 请求,并且在条件结束时的 asynctask 启动一个显示通知的新服务。当我的应用程序进入后台时,我有一个系统通知说:我的应用程序正在耗尽电池。在我的分析过程中,我了解到这个系统通知是由 DatasNotification 服务生成的。

这是我的 DatasNotification 代码:

@Override
public void onCreate() {
    super.onCreate();
    Fabric.with(this, new Crashlytics());
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        startForeground(1, new Notification());
    }
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    new HttpRequest(getApplicationContext(), 0).execute();
    return START_STICKY;
}

在 sdk >= 26 中运行后台服务有什么解决方案吗?

标签: androidservicenotifications

解决方案


这是 Oreo (API26-27) 的特定功能,用于在应用程序运行后台服务时显示“[应用程序] 正在使用电池”的系统通知。您会注意到您不会在设备中收到相同的警告运行 P (API28) 或 Android 10 (API 29),因为该警告已被完全删除/禁用。我认为您无法在应用程序中更改任何内容以防止该警告显示在 Oreo 设备中,除非您可以摆脱您的(后台)服务。

用户可以通过执行以下操作来禁用该警告:

  1. 解锁运行 Android Oreo 的设备
  2. 在通知栏上向下滑动,将“使用电池”通知完全暴露出来
  3. 长按通知直到它改变并显示一个切换
  4. 点击切换开关,确保它显示为灰色
  5. 选择完成以禁用“使用电池”通知

来源


推荐阅读