A partir de Android 14 (API nivel 34), debes declarar un tipo de servicio adecuado para cada servicio en primer plano. Esto significa que debes declarar el tipo de servicio en el manifiesto de tu app y también solicitar el permiso de servicio en primer plano adecuado para ese tipo (además de solicitar el permiso FOREGROUND_SERVICE). Además, según el tipo de servicio en primer plano, es posible que debas solicitar permisos de tiempo de ejecución antes de iniciar el servicio.
Cámara
- 要在清单中
android:foregroundServiceType下声明的前台服务类型 camera- 要在清单中声明的权限
FOREGROUND_SERVICE_CAMERA- 要传递给
startForeground()的常量 FOREGROUND_SERVICE_TYPE_CAMERA- 运行时前提条件
请求并被授予
CAMERA运行时权限- 说明
继续在后台访问相机,例如支持多任务的视频聊天应用。
Dispositivo conectado
- Tipo de servicio en primer plano que se declarará en el manifiesto en
android:foregroundServiceTypeconnectedDevice- Permiso para declarar en tu manifiesto
FOREGROUND_SERVICE_CONNECTED_DEVICE- Constante para pasar a
startForeground() FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE- Requisitos previos del entorno de ejecución
Debe cumplirse mínimo una de las siguientes condiciones:
Declara mínimo uno de los siguientes permisos en tu manifiesto:
Solicita y obtén al menos uno de los siguientes permisos de tiempo de ejecución:
Llamada a
UsbManager.requestPermission()
- Descripción
Interacciones con dispositivos externos que requieren una conexión Bluetooth, NFC, IR, USB o de red.
- Alternativas
Si la app necesita realizar una transferencia de datos continua a un dispositivo externo, considera usar el administrador de dispositivos complementarios. Usa la API de presencia de dispositivos complementarios para ayudar a que tu app siga ejecutándose mientras el dispositivo complementario esté dentro del alcance.
Si la app necesita buscar dispositivos Bluetooth, considera usar la API de búsqueda de Bluetooth.
Sincronización de datos
- 要在清单中声明的前台服务类型,位于
android:foregroundServiceTypedataSync- 要在清单中声明的权限
FOREGROUND_SERVICE_DATA_SYNC- 要传递给
startForeground()的常量 FOREGROUND_SERVICE_TYPE_DATA_SYNC- 运行时前提条件
- 无
- 说明
数据传输操作,例如:
- 数据上传或下载
- 备份和恢复操作
- 导入或导出操作
- 获取数据
- 本地文件处理
- 通过网络在设备和云端之间传输数据
- 替代方案
如需了解详情,请参阅数据同步前台服务的替代方案。
Salud
- Tipo de servicio en primer plano que se declarará en el manifiesto en
android:foregroundServiceTypehealth- Permiso para declarar en tu manifiesto
FOREGROUND_SERVICE_HEALTH- Es la constante que se pasa a
startForeground(). FOREGROUND_SERVICE_TYPE_HEALTH- Requisitos previos del entorno de ejecución
Debe cumplirse mínimo una de las siguientes condiciones:
Declara el permiso
HIGH_SAMPLING_RATE_SENSORSen tu manifiesto.Solicita y obtén al menos uno de los siguientes permisos de tiempo de ejecución:
BODY_SENSORSen el nivel de API 35 y versiones anterioresREAD_HEART_RATEREAD_SKIN_TEMPERATUREREAD_OXYGEN_SATURATIONACTIVITY_RECOGNITION
- Descripción
Cualquier caso de uso de larga duración para admitir apps de la categoría de entrenamiento, como monitoreos de ejercicios
Ubicación
- Foreground service type to declare in manifest under
android:foregroundServiceTypelocation- Permission to declare in your manifest
FOREGROUND_SERVICE_LOCATION- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_LOCATION- Runtime prerequisites
The user must have enabled location services and the app must be granted at least one of the following runtime permissions:
- Description
Long-running use cases that require location access, such as navigation and location sharing.
- Alternatives
If your app needs to be triggered when the user reaches specific locations, consider using the geofence API instead.
Contenido multimedia
- Tipo de servicio en primer plano para declarar en el manifiesto en
android:foregroundServiceTypemediaPlayback- Permiso para declarar en tu manifiesto
FOREGROUND_SERVICE_MEDIA_PLAYBACK- Constante para pasar a
startForeground() FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK- Requisitos previos del tiempo de ejecución
- Ninguno
- Descripción
Continúa la reproducción de audio o video en segundo plano. Compatibilidad con la función de grabación de video digital (DVR) en Android TV.
- Alternativas
Si muestras un video en pantalla en pantalla, usa el modo Pantalla en pantalla.
Procesando archivos multimedia
- Tipo de servicio en primer plano que se declarará en el manifiesto en
android:foregroundServiceTypemediaProcessing- Permiso para declarar en tu manifiesto
FOREGROUND_SERVICE_MEDIA_PROCESSING- Constante para pasar a
startForeground() FOREGROUND_SERVICE_TYPE_MEDIA_PROCESSING- Requisitos previos del entorno de ejecución
- Ninguno
- Descripción
Es un servicio para realizar operaciones que requieren mucho tiempo en los recursos multimedia, como convertir contenido multimedia a diferentes formatos. El sistema le permite a este servicio un tiempo limitado para ejecutarse. En circunstancias normales, este límite de tiempo sería de 6 horas de cada 24. (Todos los servicios en primer plano
mediaProcessingde una app comparten este límite).Tu app debe detener manualmente el servicio de procesamiento de contenido multimedia en la siguiente situación:
- Cuando finalice la operación de transcodificación o alcance un estado de error, haz que el servicio llame a
Service.stopForeground()yService.stopSelf()para detenerlo por completo.
- Cuando finalice la operación de transcodificación o alcance un estado de error, haz que el servicio llame a
Si se alcanza el tiempo de espera, el sistema llama al método
Service.onTimeout(int, int)del servicio. En este momento, el servicio tiene unos segundos para llamar aService.stopSelf(). Si el servicio no llama aService.stopSelf(), se producirá un error de ANR con este mensaje de error: "Un servicio en primer plano de <fgs_type> no se detuvo dentro del tiempo de espera: <component_name>".Nota:
Service.onTimeout(int, int)no está disponible en Android 14 ni versiones anteriores. En los dispositivos que ejecutan esas versiones, si un servicio de procesamiento de contenido multimedia alcanza el período de tiempo de espera, el sistema almacena en caché la app de inmediato. Por este motivo, tu app no debe esperar a recibir una notificación de tiempo de espera. En su lugar, debe finalizar el servicio en primer plano o cambiarlo a un servicio en segundo plano lo antes posible.
Proyección de contenido multimedia
- Tipo de servicio en primer plano que se declarará en el manifiesto en
android:foregroundServiceTypemediaProjection- Permiso que se debe declarar en el manifiesto
FOREGROUND_SERVICE_MEDIA_PROJECTION- Constante que se pasará a
startForeground() FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION- Requisitos previos del tiempo de ejecución
Llama al método
createScreenCaptureIntent()antes de iniciar el servicio en primer plano. Si lo haces, se mostrará una notificación de permiso al usuario, quien deberá otorgarlo antes de que puedas crear el servicio.Después de crear el servicio en primer plano, puedes llamar a
MediaProjectionManager.getMediaProjection().- Descripción
Proyecta el contenido en un dispositivo externo o una pantalla no principal con las APIs de
MediaProjection. No es necesario que este contenido sea solo multimedia.- Alternativas
Para transmitir contenido multimedia a otro dispositivo, usa el SDK de Google Cast.
Micrófono
- Tipo de servicio en primer plano que se declarará en el manifiesto en
android:foregroundServiceTypemicrophone- Permiso que se debe declarar en el manifiesto
FOREGROUND_SERVICE_MICROPHONE- Constante que se pasará a
startForeground() FOREGROUND_SERVICE_TYPE_MICROPHONE- Requisitos previos del tiempo de ejecución
Solicita y obtén el permiso de tiempo de ejecución
RECORD_AUDIO.- Descripción
Continúa con la captura de micrófono en segundo plano, como las grabadoras de voz o las apps de comunicación.
Llamada telefónica
- Tipo de servicio en primer plano que se debe declarar en el manifiesto en
android:foregroundServiceTypephoneCall- Permiso que se debe declarar en tu manifiesto
FOREGROUND_SERVICE_PHONE_CALL- Constante que se debe pasar a
startForeground() FOREGROUND_SERVICE_TYPE_PHONE_CALL- Requisitos previos del tiempo de ejecución
Debe cumplirse al menos una de las siguientes condiciones:
- La app declaró el permiso
MANAGE_OWN_CALLSen su archivo de manifiesto.
- La app declaró el permiso
- La app es la app de teléfono predeterminada a través del
ROLE_DIALERrol.
- La app es la app de teléfono predeterminada a través del
- Descripción
Continúa una llamada en curso mediante las
ConnectionServiceAPIs.- Alternativas
Si necesitas realizar llamadas telefónicas, de video o VoIP, considera usar la
android.telecombiblioteca.Considera usar
CallScreeningServicepara filtrar llamadas.
Mensajería remota
- Tipo de servicio en primer plano que se declarará en el manifiesto en
android:foregroundServiceTyperemoteMessaging- Permiso para declarar en tu manifiesto
FOREGROUND_SERVICE_REMOTE_MESSAGING- Constante para pasar a
startForeground() FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING- Requisitos previos del entorno de ejecución
- Ninguno
- Descripción
- Transfiere mensajes de texto de un dispositivo a otro. Brinda asistencia para la continuidad de las tareas de mensajería de un usuario cuando este cambia de dispositivo.
Servicio corto
- 要在清单中的以下位置声明的前台服务类型
android:foregroundServiceTypeshortService- 在清单中声明的权限
- 无
- 要传递给
startForeground()的常量 FOREGROUND_SERVICE_TYPE_SHORT_SERVICE- 运行时前提条件
- 无
- 说明
快速完成不可中断或推迟的关键工作。
这种类型有一些独特的特征:
- 只能持续运行一小段时间(大约 3 分钟)。
- 不支持粘性前台服务。
- 无法启动其他前台服务。
- 不需要类型专用权限,不过它仍需要
FOREGROUND_SERVICE权限。 - 只有当应用当前符合启动新前台服务的条件时,
shortService才能更改为其他服务类型。 - 前台服务可以随时将其类型更改为
shortService,届时超时期限将开始。
shortService 的超时时间从调用
Service.startForeground()开始算起。应用应在发生超时之前调用Service.stopSelf()或Service.stopForeground()。否则,系统会调用新的Service.onTimeout(),让应用有机会调用stopSelf()或stopForeground()来停止其服务。调用
Service.onTimeout()后的短时间内,应用会进入缓存状态,并且不再被视为处于前台,除非用户正在主动与应用互动。应用缓存一小段时间后,服务还未停止,该应用会收到 ANR 消息。ANR 消息提及FOREGROUND_SERVICE_TYPE_SHORT_SERVICE。出于这些原因,实现Service.onTimeout()回调被视为一种最佳实践。Android 13 及更低版本中不存在
Service.onTimeout()回调。如果同一服务在此类设备上运行,则不会出现超时,也不会发生 ANR。确保您的服务在完成处理任务后立即停止,即使它尚未收到Service.onTimeout()回调也是如此。请务必注意,如果未遵循
shortService的超时设置,即使应用还有其他有效的前台服务或其他应用生命周期进程,应用也会遇到 ANR。如果应用对用户可见,或满足允许从后台启动前台服务的某一豁免条件,则使用
FOREGROUND_SERVICE_TYPE_SHORT_SERVICE参数再次调用Service.StartForeground()会将超时时间再延长 3 分钟。如果应用对用户不可见且不满足其中一个豁免条件,则尝试启动其他前台服务(无论其类型如何)都会导致ForegroundServiceStartNotAllowedException。即使用户为您的应用停用电池优化功能,仍然会受到 shortService FGS 的影响。
如果您启动包含
shortService类型和另一个前台服务类型的前台服务,系统会忽略shortService类型声明。不过,该服务仍必须遵守其他声明类型的先决条件。如需了解详情,请参阅前台服务文档。
Uso especial
- Tipo de servicio en primer plano que se declarará en el manifiesto en
android:foregroundServiceTypespecialUse- Permiso para declarar en tu manifiesto
FOREGROUND_SERVICE_SPECIAL_USE- Constante para pasar a
startForeground() FOREGROUND_SERVICE_TYPE_SPECIAL_USE- Requisitos previos del entorno de ejecución
- Ninguno
- Descripción
Abarca todos los casos de uso válidos de servicios en primer plano que no están cubiertos por los otros tipos de servicios en primer plano.
Además de declarar el tipo de servicio en primer plano de
FOREGROUND_SERVICE_TYPE_SPECIAL_USE, los desarrolladores deben declarar casos de uso en el manifiesto. Para ello, especifican el elemento<property>dentro del objeto<service>. Estos valores y los casos de uso correspondientes se revisan cuando envías tu app en Google Play Console. El uso son de formato libre, y debes asegurarte de proporcionar suficientes información para que el revisor pueda ver por qué necesitas usarspecialUseel tipo de letra.<service android:name="fooService" android:foregroundServiceType="specialUse"> <property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" android:value="explanation_for_special_use"/> </service>
Sistema exento
- Tipo de servicio en primer plano que se declarará en el manifiesto
android:foregroundServiceTypesystemExempted- Permiso para declarar en tu manifiesto
FOREGROUND_SERVICE_SYSTEM_EXEMPTED- Constante para pasar a
startForeground() FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED- Requisitos previos del entorno de ejecución
- Ninguno
- Descripción
Reservado para aplicaciones del sistema, además de integraciones de sistemas específicos, para seguir usando los servicios en primer plano.
Para usar este tipo, una app debe cumplir con mínimo uno de los siguientes criterios:
- El dispositivo debe estar en modo de demostración
- La app debe ser del propietario del dispositivo
- La app debe ser del propietario del generador de perfiles.
- Apps de seguridad que tienen la función
ROLE_EMERGENCY - Apps de administración del dispositivo
- Apps que tienen el permiso
SCHEDULE_EXACT_ALARMoUSE_EXACT_ALARM Apps de VPN (configuradas mediante Configuración > Internet y redes > VPN)
De lo contrario, declarar este tipo causa que el sistema arroje una
ForegroundServiceTypeNotAllowedException.
Aplicación forzosa de las políticas de Google Play para usar tipos de servicios en primer plano
Si tu app se segmenta para Android 14 o versiones posteriores, deberás declarar los tipos de servicios en primer plano de la app en la página Contenido de la app de Play Console (Política > Contenido de la app). Para obtener más información sobre cómo declarar los tipos de servicios en primer plano en Play Console, consulta Información sobre los requisitos de los intents de pantalla completa y los servicios en primer plano.