android 奥利奥永久服务

Permanent services on android oreo

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

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

我们可以在 android 8+ 上创建永久后台服务吗?我需要在 gradle 中以 android 8 为目标,因为我预计旧目标会出现一些错误。我也不想使用在状态栏中永久显示通知的前台服务来打扰用户。

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

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

唯一可行的方法是将您的应用程序固定在 Google API 上,例如 Voice Actions API.

据我所知,没有很好的解决方法,大多数应用程序(如 WhatsApp)仍在针对 Android API 24.

对于有价值的东西,我正在分享我的经验:

部分可以使用后台服务而不显示前台通知 Android 8.0 刚刚做了一些实验最后是这样的:

只要用IMPORTANCE_NONE创建一个通知通道,通知仍然存在,但不会显示在状态栏[=37] =].

代码摘录:

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 system" 应用程序会显示关于“(您的)应用程序正在 运行 后台的通知”。 所以,这不是很好,但是,从我的角度来看,它比以前好一点。