android java中的foregroundService [重复]
Posted
技术标签:
【中文标题】android java中的foregroundService [重复]【英文标题】:foregroundService in android java [duplicate] 【发布时间】:2021-04-19 03:45:21 【问题描述】:if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
startForegroundService(new Intent(this,service.class));
这里是源代码。正如我们所见,startForegroundService 在 25 API 级别以上工作。但是,我的问题是 Facebook、Instagram 和 WhatsApp 如何在每个 API 级别使用它?
【问题讨论】:
【参考方案1】:如果您使用的是 androidx(您应该是 IMO),您可以使用适用于所有 API 版本的ContextCompat.startForegroundServce
如果没有,您可以在调用之前检查API版本:
if (Build.VERSION.SDK_INT >= 26)
context.startForegroundService(intent);
else
context.startService(intent);
请注意,Service.startForeground
从 API 5 开始可用,这意味着您的服务可以在前台运行,而无需在这些 API 版本上调用 startForegroundService
。
如果您想知道为什么 API 26 发生了变化,这里引用了documentation:
在 Android 8.0 之前,创建前台服务的常用方法是创建后台服务,然后将该服务提升到前台。对于 Android 8.0,有一个复杂的问题;系统不允许后台应用创建后台服务。为此,Android 8.0 引入了新方法
startForegroundService()
在前台启动新服务。系统创建服务后,应用有五秒钟的时间调用服务的startForeground()
方法以显示新服务的用户可见通知。如果应用没有在时限内调用startForeground()
,系统会停止服务并将应用声明为ANR。
【讨论】:
以上是关于android java中的foregroundService [重复]的主要内容,如果未能解决你的问题,请参考以下文章
权限拒绝:startForeground 需要 android.permission.FOREGROUND_SERVICE
为什么`android:foreground`属性不起作用?
Android FrameLayout的android foreground属性可以设置单击时的前景色
复制资源/android/icon/mdpi-foreground.png 时出错
媒体投影需要 Android Pie 和 Q 中类型为 ServiceInfo.FOREGROUND_SERVICE TYPE_MEDIA_PROJECTION 的前台服务