|
|
|
|
|
- Mostrar la notificación
- Gestión de la batería y notificación persistente
- Especificación de casos de uso (Android 14)
ThreadPersistent (Función) 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.
ThreadExecute("MyThread", threadGlobalContext, ProcPlayMusic)
Notif is Notification
Notif.Title = "Playing..."
Notif.ActionClick = ProcStopMusic
Notif.Deletable = False
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 2025Constante utilizada para definir el caso de uso de un subproceso persistente. Este parámetro es necesario a partir de Android 14. | | thpCamera | Acceso a la cámara en segundo plano. Permiso agregado: android.permission.FOREGROUND_SERVICE_CAMERA (tipo de manifiesto: camera) Permiso adicional requerido: android.permission.CAMERA | thpConnectedDevice | Interacció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
| thpDataSync | Sincronizació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 | thpHealth | Seguimiento 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
| thpLocation | Operaciones 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 | thpMediaPlayback | Reproducció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 | thpMicrophone | Grabación de audio en segundo plano Permiso agregado: android.permission.FOREGROUND_SERVICE_MICROPHONE (tipo de manifiesto: microphone) Permisos adicionales requeridos: android.permission.RECORD_AUDIO | thpShortService | Operació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 2025Especificació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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|