[英]Background service for android oreo
如何在不显示通知点的情况下继续在Android Oreo中进行后台服务? 我使用通知继续后台服务,但我不想显示正在运行的服务的通知。
如果您可以在此处的某处正确阅读Android Oreo 8.0文档,则可能未在此处发布此问题。
步骤1:确保您将服务作为前台
Service
启动,如以下代码所示
ContextCompat.startForegroundService(mainActivity, new Intent(getContext(), GpsServices.class));
ContextCompat.startForegroundService(mainActivity, new Intent(getContext(), BluetoothService.class));
ContextCompat.startForegroundService(mainActivity, new Intent(getContext(), BackgroundApiService.class));
步骤2:使用通知显示您的服务正在运行。 在
Service
onCreate
方法中添加以下代码行。
@Override
public void onCreate() {
...
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForeground(NOTIFICATION_ID, notification);
}
...
}
步骤3:在服务停止或销毁时删除
notification
。
@Override
public void onDestroy() {
...
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
stopForeground(true); //true will remove notification
}
...
}
此解决方案的一个问题是,它将一直显示notification
直到您的Service
在Android Oreo 8.0上运行的所有设备上运行为止。
我确信即使该应用程序处于后台或处于终止状态,该解决方案也能正常工作。
重要说明:在ANDROID OREO 8.0中必须显示在后台运行服务的通知(在后台或处于杀毒状态的APP)。 您不能逃避它。 因此, 建议您在应用中进行必要的更改,以使其按照ANDROID遵循或要求的最佳做法正确地工作。
我希望这可能有助于解决您的问题。
在此API version (26)
及更高API version (26)
这是不可能的。 Android OS在运行服务时会自动关闭它,而不会向用户显示通知。
如果您的目标API >= 26
则系统会限制您的服务在后台运行,除非您的活动在前台运行。 您的活动一旦进入后台,当系统发现它在后台运行时,该服务就会终止(请参阅后台服务限制 )。
通过使用startForegroundService()
方法,即使活动未运行,您也可以授予该权限在后台运行服务。 还必须在创建服务后startForeground()
在五秒钟内调用其startForeground()
方法。
这段代码对我有用。 首先,请确保:
1-在清单中定义服务
2-在清单中定义权限
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
3-确保之前已启动服务。
您的服务应该有一个通知。 您应注意,您的通知必须具有ChannelID!
此页面可以帮助您:
现在将以下代码粘贴到您的服务中
@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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.