AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

Ayuda / WLanguage / Funciones WLanguage / Funciones estándar / Funciones de gestión de procesos / Hilos, semáforos, señales y mutex
  • Mostrar la notificación
  • Gestión de la batería y notificación persistente
  • Especificación de casos de uso (Android 14)
WINDEV
WindowsLinuxJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadIOS WidgetApple WatchMac Catalyst
Otros
Procedimientos almacenados
Hace que un subproceso sea persistente.
La aplicación no se detiene mientras haya al menos un subproceso persistente en ejecución (aunque se hayan cerrado todas sus ventanas).
Por ejemplo, el uso de un subproceso persistente permite:
  • seguir reproduciendo música aunque se cierre la ventana.
  • transmitir coordenadas GPS de forma permanente.
Ejemplo
// Start the thread that triggers the reading of a sound track
ThreadExecute("MyThread", threadGlobalContext, ProcPlayMusic)

// Creates the notification to display while playing the sound track
Notif is Notification
Notif.Title = "Playing..."
Notif.ActionClick = ProcStopMusic
// Prevent hiding the notification
Notif.Deletable = False

// Make the thread persistent to prevent the application from being closed 
// as long as the thread is not ended
// Specified use (Android 14: thpMediaPlayback (music playback)
ThreadPersistent("MyThread", Notif, thpMediaPlayback)
Sintaxis
<Result> = ThreadPersistent(<Thread name> , <Notification to display> [, <Usage>])
<Result>: Booleano
  • True si el subproceso es persistente,
  • False si se produce un error. Para obtener más información sobre el error, utilice la función ErrorInfo con la constante errMessage.
<Thread name>: Cadena de caracteres
Nombre del subproceso que debe ser persistente. Este nombre se asigna al ejecutar el subproceso (con la función ThreadExecute). Este subproceso debe existir y utilizar el contexto global de la aplicación.
<Notification to display>: Variable de tipo Notification
Nombre de la variable de tipo Notification que corresponde a la notificación que se mostrará mientras el subproceso persistente continúa ejecutándose.
No deben estarse mostrando notificaciones previamente. Si un subproceso persistente se está ejecutando al llamar a la función ThreadPersistent, la notificación asociada a ese subproceso será reemplazada por la notificación especificada. Cuando finalice la ejecución del subproceso, la notificación se ocultará automáticamente si no hay ningún otro subproceso persistente en curso.
<Usage>: Constante de tipo Integer
Novedad versión 2025
Constante utilizada para definir el caso de uso de un subproceso persistente. Este parámetro es necesario a partir de Android 14.
thpCameraAcceso a la cámara en segundo plano.
Permiso agregado: android.permission.FOREGROUND_SERVICE_CAMERA (tipo de manifiesto: camera)
Permiso adicional requerido: android.permission.CAMERA
thpConnectedDeviceInteracción con dispositivos conectados. Por ejemplo, interacción con un sensor de frecuencia cardíaca.
Permiso agregado: android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE (tipo de manifiesto: connectedDevice)
Permisos adicionales requeridos:
  • debe haberse declarado al menos uno de los siguientes permisos:
    • android.permission.CHANGE_NETWORK_STATE, android.permission.CHANGE_WIFI_STATE,
    • android.permission.CHANGE_WIFI_MULTICAST_STATE, android.permission.NFC,
    • android.permission.TRANSMIT_IR,android.permission.UWB_RANGING
  • o al menos uno de los siguientes permisos debe haber sido declarado y aceptado:
    • android.permission.BLUETOOTH_ADVERTISE,
    • android.permission.BLUETOOTH_CONNECT,
    • android.permission.BLUETOOTH_SCAN
thpDataSyncSincronización de datos. Por ejemplo, importar datos de una base de datos.
Permiso agregado: android.permission.FOREGROUND_SERVICE_DATA_SYNC (tipo de manifiesto: dataSync)
Permiso adicional requerido: Ninguno
thpHealthSeguimiento de la actividad física.
Permiso agregado: android.permission.FOREGROUND_SERVICE_HEALTH (tipo de manifiesto: health)
Permiso adicional requerido:
  • Permiso que se debe declarar: android.permission.HIGH_SAMPLING_RATE_SENSORS
  • o se debe haber declarado y aceptado al menos uno de los siguientes permisos: android.permission.BODY_SENSORS, android.permission.ACTIVITY_RECOGNITION
thpLocationOperaciones que requieren acceso a la ubicación, como la navegación y el uso compartido de la ubicación.
Permiso agregado: android.permission.FOREGROUND_SERVICE_LOCATION (tipo de manifiesto: location)
Permisos adicionales requeridos: Debe haberse declarado al menos uno de los siguientes permisos: android.permission.ACCESS_COARSE_LOCATION, android.permission.ACCESS_FINE_LOCATION
thpMediaPlaybackReproducción continua de audio o video en segundo plano.
Permiso agregado: android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK (tipo de manifiesto: mediaPlayback)
Permisos adicionales requeridos: Ninguno
thpMicrophoneGrabación de audio en segundo plano
Permiso agregado: android.permission.FOREGROUND_SERVICE_MICROPHONE (tipo de manifiesto: microphone)
Permisos adicionales requeridos: android.permission.RECORD_AUDIO
thpShortServiceOperación crítica que debe completarse sin interrupción. Esta operación no debe durar más de tres minutos.
Permiso agregado: Ninguno (tipo de manifiesto: shortService)
thpSpecialUse
(Valor predeterminado)
Operación cuyo caso de uso no corresponde a ninguno de los casos predefinidos.
Permiso agregado: android.permission.FOREGROUND_SERVICE_SPECIAL_USE (tipo de manifiesto: specialUse)

Nota: Puede describir el caso de uso del subproceso persistente de forma más precisa agregando el siguiente nodo como hijo del nodo <service> en el manifiesto de la aplicación:
<property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
android:value="use case explanation"/>
Esto puede ser necesario para publicar su aplicación en Google Play.
Observaciones

Mostrar la notificación

  • Siempre debe mostrarse una notificación al ejecutar un subproceso persistente. De este modo, los usuarios saben que la aplicación que han iniciado sigue ejecutándose, aunque no haya ventanas abiertas. Los usuarios pueden volver a la aplicación haciendo clic en la notificación.
    También es posible reactivar la aplicación al hacer clic en la notificación. Solo tiene que especificar el parámetro ActivateApplication en la variable de tipo Notification.
  • Consejo: No abra una ventana desde un subproceso persistente. Las ventanas pueden abrirse desde el procedimiento llamado por la notificación.
  • A partir de Android 13, los usuarios pueden ocultar la notificación. Puede evitar esta opción utilizando la función Deletable de la variable de tipo Notification.

Gestión de la batería y notificación persistente

A partir de Android 10, la optimización del uso de la batería integrada puede interrumpir un subproceso definido como persistente con la función ThreadPersistent. En este caso, la función SysBatteryOptimBackground permite a la aplicación utilizar la batería y conservar el subproceso persistente.
Novedad versión 2025

Especificación de casos de uso (Android 14)

A partir de Android 14, es necesario indicar los casos de uso del subproceso persistente al llamar a la función ThreadPersistent, utilizando el parámetro <Usage>.
Se agregará un nuevo permiso automáticamente según los casos de uso especificados.
Algunos casos de uso también requieren que se declaren permisos asociados. Estos permisos no se agregan automáticamente. Si no se han agregado los permisos asociados a la aplicación, se producirá un error fatal.
Por ejemplo, si se utiliza la constante thpCamera, el permiso "android.permission.FOREGROUND_SERVICE_CAMERA" se agregará automáticamente a la aplicación, y se solicitará el permiso "android.permission.CAMERA".
Clasificación Lógica de negocio / UI: Código neutro
Componente: wd300android.jar
Versión mínima requerida
  • Versión 18
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 14/02/2025

Señalar un error o enviar una sugerencia | Ayuda local