AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

Ayuda / Desarrollar para Android
  • Presentación
  • Recordatorio: nivel de API al que se orienta la app ("TargetSdkVersion")
  • Comportamiento de aplicaciones en segundo plano
  • Presentación
  • Cambios a partir de WINDEV Mobile 25 Update 3
  • Lista de funciones relacionadas
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Otros
Procedimientos almacenados
Advertencia
A partir de la versión 26 (93), WINDEV Mobile es compatible con Android 11. Para obtener más información, consulte Android 11: Modificación del comportamiento de las aplicaciones.
Presentación
Después de cada nueva versión de Android, Google requiere que se aumente el nivel de API "TargetSdkVersion" para publicar aplicaciones en Google Play. Con el lanzamiento de Android 10, Google ahora requiere que las aplicaciones suban el nivel de API a 29 para poder implementarlas. Este nuevo nivel de API se aplica a partir del:
  • 3 de agosto de 2020 para las nuevas aplicaciones,
  • 2 de noviembre de 2020 para las aplicaciones actualizadas.
Las aplicaciones tendrán los siguientes cambios:
  1. En Android 10
    • Cuando una aplicación está en segundo plano, no se puede abrir ninguna ventana. Para obtener más información, consulte Comportamiento de aplicaciones en segundo plano.
    • Ya no es posible obtener un identificador único para el dispositivo con las funciones SysIMEI y SysSerialNum. Las aplicaciones "Device owner" no se ven afectadas por esta restricción.
    • Ya no es posible manipular los parámetros de conexión WiFi mediante programación. Las siguientes funciones provocan un error fatal cuando se utilizan en Android 10 o posterior: WiFiActivate (sintaxis para cambiar solo la activación), WiFiAddNetwork, WiFiDeleteNetwork, WiFiConnect y WiFiListNetwork.
      Las aplicaciones "Device owner" no se ven afectadas por esta restricción.
    • Ya no es posible obtener el contenido del portapapeles si la aplicación está en segundo plano.. En ese caso, la función Clipboard devolverá una cadena vacía.
  2. En Android 10 con nivel de API 29:
    • Las aplicaciones ya no pueden acceder a los archivos ubicados en el almacenamiento externo, fuera de sus directorios específicos (función SysDirExternalStorage con constantes sseApp*).
      Ya no se puede acceder a estos archivos en modo de lectura o escritura. Por lo tanto, no deben utilizarse rutas de archivo fijas o construidas a partir de las funciones SysDirStorageCard o SysDirExternalStorage con las constantes ssePublicxxx. Esta restricción será definitiva a partir de Android 11, nivel de API 30. En Android 10 (nivel de API 29), es posible seguir accediendo a algunas de estas ubicaciones, por lo que pueden utilizarse con esta versión de WINDEV Mobile (para ello, el atributo requestLegacyExternalStorage se agrega automáticamente). No obstante, se recomienda realizar las adaptaciones necesarias en las aplicaciones que acceden a estas ubicaciones.
    • Android 10 ha implementado un nuevo permiso para las funciones que permiten obtener la ubicación del dispositivo: ACCESS_BACKGROUND_LOCATION.
      Este permiso se añade automáticamente cuando se utiliza una de las siguientes funciones en la aplicación para permitir su uso en segundo plano:
      BeaconDetectBackgroundNotifica a la aplicación cuando el dispositivo entra o sale del rango de transmisión de un conjunto de balizas.
      BeaconDetectPrecisePermite buscar balizas cerca del dispositivo.
      BTLEListDeviceDevuelve la lista de dispositivos Bluetooth Low Energy.
      BTListDeviceDevuelve la lista de dispositivos Bluetooth accesibles.
      geoTrackingEnablePermite seguir la ubicación en una aplicación WINDEV Mobile.
      GPSDetectPositionPide ser notificado cuando el dispositivo se acerca a una ubicación determinada.
      GPSFollowMovementSolicita que se le notifique periódicamente la ubicación actual del dispositivo.
      GPSGetPositionRecupera información sobre la posición actual del dispositivo.
      GPSInfoDevuelve información sobre el proveedor de ubicación utilizado por la aplicación para las funciones de geolocalización.
      GPSInitParameterInicializa los parámetros de las funciones de geolocalización de WLanguage y busca un proveedor de ubicación.
      GPSLastPositionRecupera la información sobre la última posición conocida del dispositivo.
      GPSStatusRecupera el estado de activación del proveedor de geolocalización o pide ser notificado cuando cambia el estado.
      GPSStopDetectionDetiene la detección de la ubicación activada por GPSDetectPosition.
      MapFollowMovementMuestra la ubicación actual del dispositivo en una control Mapa y actualiza la ubicación a medida que se mueve.
      MobileNetworkConnectionInfoDevuelve información sobre la conexión actual a los datos a través de la red móvil.
      WiFiDetectAccessPointInicia la detección de los puntos de acceso Wi-Fi a los que se puede acceder desde el dispositivo.
      Cuando se agrega este permiso a la aplicación, el usuario puede conceder acceso a la ubicación del dispositivo cuando la aplicación está en segundo plano, solo cuando la aplicación está en uso, o denegar el acceso. El usuario puede cambiar estos permisos en cualquier momento en la configuración de Android.
Observación: El siguiente error puede aparecer cuando se publica una aplicación en el Play Store: "La clave privada no se cifró correctamente o no se admite este tipo de clave". Se debe volver a crear el archivo de firma de la aplicación (este archivo se puede crear en el asistente de generación de la aplicación).
Atención: Si hay identificadores basados en el archivo de firma (por ejemplo, el identificador de Google Map), es necesario volver a generarlos con la nueva clave.

Recordatorio: nivel de API al que se orienta la app ("TargetSdkVersion")

Cuando se compila una aplicación para Android, el APK generado incluye un nivel de API "TargetSdkVersion" del SDK de Android. Con este nivel de API, Android determina las funcionalidades que se pueden incluir en la aplicación, y las reglas de seguridad que se deben aplicar a la misma.
El nivel de API de una aplicación ("TargetSdkVersion") puede verse en el asistente de generación del APK, en la etapa "Configuración":
  1. Haga clic en "Configuración avanzada",
  2. En la ventana "Configuración avanzada", seleccione "Editar manifiesto",
  3. Despliegue el nodo "uses-sdk",
  4. la línea "android:targetSdkVersion" muestra el nivel de API.
El nivel de API se puede modificar. Esto significa que es posible especificar el nivel de API 29 en una aplicación WINDEV Mobile generada sin la actualización 118 661. Pero en este caso la aplicación no tendrá un framework adaptado a las especificidades de este nivel de API. Por lo tanto, esta solución debe evitarse, ya que Android aplicará reglas de seguridad diferentes de aquellas para las que se ha probado la aplicación.
Para obtener más información, consulte el sitio de Google.
Comportamiento de aplicaciones en segundo plano

Presentación

A partir de Android 10, Google no permite que una aplicación abra una ventana si está en segundo plano (Activity) https://developer.android.com/guide/components/activities/background-starts. Este es un cambio muy importante que afecta a todas las aplicaciones Android, incluidas las que se generan con WINDEV Mobile. Las aplicaciones "Device owner" son la única excepción. En este modo específico, las aplicaciones aún pueden abrir las ventanas.
Una aplicación que se ha ejecutado correctamente en versiones anteriores, tendrá restricciones si se instala en Android 10:
  • cuando la aplicación está en segundo plano, no es posible abrir una ventana (mediante las funciones OpenMobileWindow, Info, Error, Dialog, etc.),
  • no se pueden utilizar funciones WLanguage que abran una ventana (SMSRunApp, etc.),
  • el framework de Android de la aplicación también se bloqueará y no podrá abrir una ventana estando en segundo plano. La apertura de una ventana en segundo plano a través del framework es necesaria para las siguientes funcionalidades:
    • recibir una notificación push,
    • detectar la entrada o salida de una región beacon (función BeaconDetectBackground),
    • recibir una nueva ubicación cuando el seguimiento (tracking) de la ubicación está activado (función geoTrackingProcedure),
    • ejecutar tareas en segundo plano (funciones BackgroundTaskxxx).
    • ejecutar la aplicación cuando se inicia el dispositivo Android.
Estas restricciones se aplican a todas las aplicaciones generadas con WINDEV Mobile 25 "Update 2" y versiones anteriores.

Cambios a partir de WINDEV Mobile 25 Update 3

El framework de Android de las aplicaciones WINDEV Mobile ha sido modificado para tener en cuenta este requisito de Google. Todas las adaptaciones necesarias están incluidas a partir de WINDEV Mobile 25 Update 3.
A partir de WINDEV Mobile 25 Update 3, las notificaciones push, el seguimiento de la ubicación y la detección de balizas (beacon), ... se han restablecido. Además, se ha mejorado el mecanismo de seguridad de WLanguage para provocar un error fatal si se llama a una función que abre una ventana cuando la aplicación está en segundo plano (ver lista de funciones relacionadas).
Para asegurarse de que una aplicación funciona correctamente en Android 10, es necesario:
  • usar al menos WINDEV Mobile 25 Update 3 para generarla,
  • verificar todos los procesos que se pueden ejecutar desde la aplicación en segundo plano: estos procesos no deben abrir ninguna ventana. Para optimizar el código, es posible:
    • utilizar la función InBackgroundMode para determinar si el proceso actual se está ejecutando en segundo plano.
    • utilizar la función ExeInfo para saber si la aplicación se inicia al mismo tiempo que el dispositivo. En este caso, si se llama a esta función con la constante exeLaunch como parámetro, se devuelve la constante exeStartup.
    • Si una aplicación debe interactuar con el usuario cuando está en segundo plano, se recomienda mostrar una notificación. Al hacer clic en la notificación, la aplicación volverá al primer plano y podrá abrir una ventana desde el procedimiento llamado con la propiedad ActionClick de la notificación (la propiedad ActivateApplication de la variable Notification debe estar establecida en True).
  • al desarrollar la aplicación en un dispositivo Android, utilice el registro Android para identificar el origen de un posible bloqueo durante la ejecución en segundo plano. Dado que no se puede abrir una ventana cuando la aplicación está en segundo plano, el mecanismo de seguridad de WLanguage no puede transmitir ninguna información. Los errores se registran en el registro Android.

Lista de funciones relacionadas

Las siguientes funciones provocan un error fatal si se realiza una llamada desde un código ejecutado en segundo plano:
AlbumPickerRecupera una foto, imagen o video almacenado en el álbum de fotos del dispositivo móvil.
AppointmentCreateMuestra la ventana de creación de la aplicación nativa Appointment para la gestión de los Appointment que se encuentran en el dispositivo Android.
AppointmentDisplayMuestra una Appointment en la aplicación nativa de gestión de Appointment s que se encuentra en el dispositivo móvil (Android o iOS).
AppOpenFormAbre:
  • el formulario de una aplicación en Android (Play Store), iOS (App Store) o Windows (Windows Store) para que el usuario le dé una marca y/o a comment la.
  • el formulario para configurar las compras In-App de una aplicación.
AuthIdentifyRealiza una autenticación utilizando el protocolo OAuth 2.0 en cualquier servicio web.
BCCaptureDecodifica la información almacenada en un código de barras utilizando la cámara del dispositivo (Android, iPhone, iPad).
BTChangeVisibilityCambia la visibilidad de una radio Bluetooth.
CheckUserIdentityPermite comprobar la identidad real del usuario actual a través de la comprobación biométrica.
ConfirmMuestra un mensaje en un cuadro de diálogo estándar que propone las opciones "Sí", "No", "Cancelar", y devuelve la respuesta del usuario.
ConfirmAsynchronousMuestra un mensaje no bloqueante en un cuadro de diálogo estándar con las respuestas "Sí", "No", "Cancelar" y llama a un procedimiento WLanguage con la respuesta del usuario.
ContactCreateMuestra la ventana de creación de Contact de la aplicación nativa de gestión de Contact que se encuentra en el dispositivo (Android, iPhone o iPad, Universal Windows).
ContactDisplayAbre el formulario de una Contact en la aplicación nativa de gestión de Contact del dispositivo (Android, iPhone o iPad, Universal Windows).
ContactEditAbre el formulario de una Contact en modo edición en la aplicación nativa Contact s del dispositivo (Android, iPhone, iPad, Universal Windows).
ContactSelectMuestra la lista de contactos encontrados en el dispositivo (Android, iPhone o iPad, Universal Windows).
DatePickerAbre el selector de fecha del sistema.
DialogMuestra un cuadro de mensaje y devuelve el valor del botón pulsado por el usuario.
DialogAsynchronousMuestra un cuadro de mensaje no bloqueante y llama a un procedimiento WLanguage con el valor del botón pulsado por el usuario.
EmailOpenMailAbre el software de mensajería Default:
  • de usuario Web en el ordenador del navegador.
  • del usuario en el ordenador Windows actual.
  • en la Phone.
EmailRunAppInicia la aplicación nativa para enviar mensajes de correo electrónico que se encuentran en el equipo actual.:
  • Ordenador con Windows,
  • Dispositivo móvil (Android, iPhone, iPad).
ErrorMuestra un mensaje de error personalizado en una ventana de error del sistema.
ErrorAsynchronousMuestra un mensaje de error personalizado en una ventana de error del sistema no bloqueante.
ErrorBuildMuestra un mensaje de error personalizado en una ventana de error del sistema.
ExeRunEjecuta un programa (un archivo ejecutable, por ejemplo) desde la aplicación actual.
FBStartSessionPermite autenticarse e iniciar sesión en Faceboook.
geoRunAppInicia la aplicación nativa de mapas del dispositivo para mostrar:
  • una ubicación geográfica específica,
  • una ruta entre dos lugares.
GglPrintDocumentImprime un Document (archivo de texto o PDF, imágenes, Word o Excel Document, ...) usando el servicio Cloud Print de Google.
gpwAuthLoginLe permite conectarse al User Groupware utilizando la autenticación con una cuenta como Facebook, Google, Microsoft, etc.
inAppPurchaseProductEnvía una solicitud de compra de un producto "In-App" associated con la aplicación.
InfoMuestra un mensaje personalizado en una ventana de información del sistema.
InfoAsynchronousMuestra un mensaje personalizado no bloqueante en una ventana de información del sistema.
InfoBuildMuestra un mensaje personalizado en una ventana de información del sistema.
InputMuestra un mensaje que permite al usuario escribir una información.
KioskDisableDesactiva el modo kiosco para la aplicación actual.
KioskEnableCambia la aplicación Android en curso a modo kiosco.
NFCReadTagInicia la lectura de una etiqueta NFC o permite la detección de etiquetas NFC para la ventana actual.
NFCSendTagEnvía una etiqueta NFC a otro dispositivo.
NFCWriteTagInicia la escritura de datos en una etiqueta NFC.
OKCancelMuestra un mensaje en un cuadro de diálogo estándar que propone "OK" y "Cancel" y devuelve la elección del usuario.
OKCancelAsynchronousMuestra un mensaje en un cuadro de diálogo estándar no bloqueante que propone las respuestas "OK" y "Cancelar" y llama a un procedimiento WLanguage con la respuesta del usuario.
OpenMobileWindowAbre una ventana en una aplicación móvil.
ShellExecuteAbre un Document en su aplicación associated.
SMSRunAppInicia la aplicación nativa de envío de SMS que se encuentra en el dispositivo (Android o iPhone/iPad).
SpeechRecognitionTriggerActiva el servicio de reconocimiento de voz del dispositivo.
SpeechSynthesisInitializeInicializa los parámetros de síntesis de voz para la aplicación actual.
SpeechSynthesisReadFileLee el contenido del archivo especificado utilizando el motor de síntesis de voz que se encuentra en el dispositivo.
SpeechSynthesisReadTextLee el texto especificado utilizando el motor de conversión de texto a voz del dispositivo.
StartShareAbre una ventana emergente que permite seleccionar la aplicación que se utilizará para compartir una Resource (texto o Document).
SysBatteryOptimBackgroundSe utiliza para gestionar la optimización de la batería:
  • Identifica el modo de optimización de la batería para la aplicación actual.
  • Indica al usuario que deshabilite la optimización de la batería para una aplicación determinada en el dispositivo.
Esta función puede utilizarse para indicar al sistema operativo que deje de impedir que la aplicación se ejecute en la Background.
tapiDialerCallAbre la aplicación de telefonía por defecto (marcador) que se encuentra en la Phone y marca el número especificado.
tapiDialerDisplayAbre la aplicación de telefonía Default (marcador) y muestra el número especificado. No se realiza ninguna llamada.
TimePickerAbre el selector de hora del sistema.
URISelectAbre una ventana del sistema para seleccionar una Resource de:
  • desde el sistema de archivos de dispositivos,
  • desde la nube (Google Drive, Microsoft OneDrive, etc.)
  • o desde uno de los gestores de contenidos instalados en el dispositivo.
VideoStartAppInicia la aplicación de la cámara nativa del dispositivo para Record un video o para tomar una foto.
WarningMuestra un mensaje personalizado en una ventana de advertencia del sistema.
WarningAsynchronousMuestra un mensaje personalizado en una ventana de advertencia del sistema no bloqueante.
YesNoMuestra un mensaje en un cuadro de diálogo estándar que propone la opciones "Sí" y "No", y devuelve la respuesta del usuario.
YesNoAsynchronousMuestra un mensaje en un cuadro de diálogo estándar no bloqueante con las respuestas "Sí" y "No" y llama a un procedimiento WLanguage con la respuesta del usuario.
Versión mínima requerida
  • Versión 25
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 26/01/2023

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