Java android oreo的后台服务

Java android oreo的后台服务,java,android,push-notification,android-service,android-8.0-oreo,Java,Android,Push Notification,Android Service,Android 8.0 Oreo,如何在android Oreo中继续提供后台服务而不显示通知点?我使用通知继续后台服务,但不想显示运行服务的通知 这在本API版本(26)及更高版本中是不可能的。如果您运行服务时没有向用户显示通知,Android操作系统会自动关闭服务 如果您的目标是API>=26,系统将限制您的服务在后台运行,除非您的活动在前台。一旦您的活动转到后台,当系统发现服务在后台运行时,服务将终止(请参阅) 通过使用startForegroundService()方法,您可以授予在后台运行服务的权限,即使活动未运行。

如何在android Oreo中继续提供后台服务而不显示通知点?我使用通知继续后台服务,但不想显示运行服务的通知

这在本
API版本(26)
及更高版本中是不可能的。如果您运行服务时没有向用户显示通知,Android操作系统会自动关闭服务

如果您的目标是
API>=26
,系统将限制您的服务在后台运行,除非您的活动在前台。一旦您的活动转到后台,当系统发现服务在后台运行时,服务将终止(请参阅)

通过使用
startForegroundService()
方法,您可以授予在后台运行服务的权限,即使活动未运行。
还必须在创建服务后,该服务必须在五秒钟内调用其
startForeground()
方法。

如果您在中的某个地方正确阅读了Android Oreo 8.0文档,您可能不会在此处发布此问题

步骤1:确保您启动的服务是前台
服务
,如下代码所示

步骤2:使用通知显示您的服务正在运行。在
服务的
方法的
onCreate
中添加以下代码行

步骤3:在服务停止或销毁时删除
通知

此解决方案的一个问题是,它会一直显示
通知
,直到您的
服务
在运行于Android Oreo 8.0的所有设备上运行

我确信这个解决方案即使在应用程序处于后台或kill状态时也能工作

重要提示:在ANDROID OREO 8.0中,显示后台运行服务的通知(应用程序处于后台或终止状态)是必需的。你不能带着它逃跑。因此,建议您对应用程序进行必要的更改,使其按照ANDROID遵循或要求的最佳实践正常运行


我希望这可能有助于解决您的问题。

这段代码对我很有用。首先,你要确保:

1-在清单中定义服务

2-在清单中定义权限

  <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
然后添加以下代码:

@Override
public ComponentName startForegroundService(Intent service) {
    return super.startForegroundService(service);
}
这是:

@Override
public void onDestroy() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        stopForeground(true);
    }
}

提供一些代码并进一步解释您的问题…但如何处理orieo中接收到的启动复杂侦听器?它会一次又一次地给我错误检查Fb和whatsapp在没有该通知的情况下如何工作?@CecilPaul,因为该应用程序暂时被列入“处理高优先级Firebase云消息(FCM)消息”的白名单。阅读本页的更多信息当前有许多应用程序在后台运行服务,但没有使用Oreo和更高版本的通知图标。首先,大多数安全监控应用程序,cctv。甚至最著名的facebook、instagram、whatsapp等。;我怀疑在Oreo和更高版本中使用服务的唯一方法是在前台。目前有许多应用程序在后台运行服务,而没有使用Oreo和更高版本的通知图标。首先,大多数安全监控应用程序,cctv。甚至最著名的facebook、instagram、whatsapp等。;我怀疑在Oreo和更高版本中使用服务的唯一方式是前台。Faebook、instagram、whatsapp和其他大牌公司获得了谷歌和苹果的特殊许可,可以访问我们普通人无法访问的系统服务。
  <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
@Override
    public void onCreate() {
        super.onCreate();
            try {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    startForeground(" your Notification ID ", notification);
                }
            } catch (Exception e) {
                Log.e(" Error --->> ", e.getMessage());
            }
    }
@Override
public ComponentName startForegroundService(Intent service) {
    return super.startForegroundService(service);
}
@Override
public void onDestroy() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        stopForeground(true);
    }
}