【问题标题】:Permanent services on android oreoandroid oreo 上的永久服务
【发布时间】:2017-11-13 18:00:27
【问题描述】:

Android 8 的电池消耗改进对用户来说很好,但我有点担心我的服务能否按预期工作。

首先:感谢您的任何建议,但我不能只安排我的服务。我想让一个OK Google-like 关键字监听器一直在后台运行。它将基于开源的 pocketsphinx-android 库。我知道这会消耗大量电池电量,我会通知用户。

我们可以在 android 8+ 上创建一个永久的后台服务吗?我需要在 gradle 中定位 android 8,因为我期待一些旧目标的错误。我也不想在状态栏中永久显示通知的前台服务惹恼用户。

[https://developer.android.com/about/versions/oreo/background.html] - 真的没有办法为我的用例(但最好是所有用例)提供永久后台服务吗?

【问题讨论】:

  • 确实没有一种干净的方法可以无限期地运行后台服务。如果你想连续工作,你的应用程序的某些部分必须在前台。
  • "我们可以在 android 8+ 上创建一个永久的后台服务吗?" -- 使用前台服务。这仍然不是“永久的”,但它和以往一样永久。 “我也不想用在状态栏中永久显示通知的前台服务来惹恼用户”——你没有太多选择。
  • 哦。那很糟。我知道永久后台服务可能会让用户感到厌烦,但我确实应该有一种方法来制作连续的关键字监听器。

标签: java android service kotlin android-8.0-oreo


【解决方案1】:

很遗憾,在 Android 8.0 及更高版本上无法使用后台服务并且不显示前台通知。

它可能起作用的唯一一种方法是,如果您将您的应用程序绑定到 Google API,例如 Voice Actions API

据我所知,目前还没有很好的解决方法,大多数应用程序(如 WhatsApp)仍以 Android API 24 为目标。

【讨论】:

  • 好的。感谢您的帮助。
【解决方案2】:

为了什么是值得的,我正在分享我的经验:

部分可以在 Android 8.0 上使用后台服务而不显示前台通知,只是做了一些实验,结果如下:

只需用IMPORTANCE_NONE创建一个通知通道,通知仍然存在,但不会显示在状态栏

代码摘录:

NotificationChannel channelService = new NotificationChannel(
    YOUR_SERVICE_CHANNEL_ID,
    YOUR_CHANNEL_HUMAN_READABLE_NAME,
    NotificationManager.IMPORTANCE_NONE);

channelService.setSound(null, null); // let's be quiet : no sound
channelService.setLockscreenVisibility(Notification.VISIBILITY_SECRET); // not on lock screen

// Register the channel with the system; you can't change the importance
// or other notification behaviors after this
// changes needs to uninstall app or clean app data, or rename channel id!
notificationManager.createNotificationChannel(channelService));


这样,当您的应用在前台运行时,通知将不会显示。

不是一个完美的解决方案:

当您的应用进入后台(即您打开另一个应用)时,“Android 系统”应用会显示有关“(您的)应用正在后台运行”的通知。 所以,这不是很好,但是,从我的角度来看,它比以前好一点。

【讨论】:

  • Android 8.1 及更高版本会在服务调用 startForeground 时强制显示通知,无论其重要性如何。
  • @andrei_zaitcev 好吧,不完全是。如果启动服务的应用程序本身也在前台运行,那么我的技巧就奏效了。但确实,当这个应用程序进入后台时,会显示“服务在前台启动”的通知。回到应用程序将再次隐藏它。很奇怪,但这就是我在我的 2 台 Andoird 8.1 设备上看到的。
猜你喜欢
  • 1970-01-01
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-30
  • 2023-04-05
  • 1970-01-01
  • 2016-01-08
相关资源
最近更新 更多