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
WindowsLinuxJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadIOS WidgetApple WatchMac Catalyst
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:
      BeaconDetectBackgroundNotifies the application when the device enters or leaves the transmission range of a set of Beacons.
      BeaconDetectPreciseUsed to find the Beacons near the device.
      BTLEListDeviceReturns the list of accessible Bluetooth Low Energy devices.
      BTListDeviceReturns the list of accessible Bluetooth devices.
      geoTrackingEnablePermite seguir la ubicación en una aplicación WINDEV Mobile.
      GPSDetectPositionPide ser notificado cuando el dispositivo se acerca a una ubicación determinada.
      GPSFollowMovementRequests to be notified periodically of the device's current location.
      GPSGetPositionRetrieves information about the current device position.
      GPSInfoReturns the information about the location provider used by the application for geolocation functions.
      GPSInitParameterInitializes the parameters of geolocation WLanguage functions and finds a location provider.
      GPSLastPositionRetrieves the information about the last known device position.
      GPSStatusRecupera el estado de activación del proveedor de geolocalización o pide ser notificado cuando cambia el estado.
      GPSStopDetectionStops the location detection triggered by GPSDetectPosition.
      MapFollowMovementDisplays the current location of the device in a Map control and updates the location as it moves.
      MobileNetworkConnectionInfoReturns information regarding the current connection to data on the mobile network.
      WiFiDetectAccessPointStarts detecting the Wi-Fi access points currently accessible from the device.
      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.
AppointmentCreateAbre una nueva ventana para crear una cita en la aplicación de calendario nativa del dispositivo.
AppointmentDisplayMuestra una cita en la aplicación nativa de gestión de citas que se encuentra en el dispositivo móvil (Android o iOS).
AppOpenFormWorking:
  • an application's listing on the Android (Play Store) or iOS (App Store) market so that users can rate and/or comment on it.
  • the form for configuring the In-App purchases of an application.
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).
BTChangeVisibilityChanges the visibility of a Bluetooth radio.
CheckUserIDentityChecks the identity of the current user using biometric authentication.
ConfirmDisplays a message in a standard dialog box that proposes "Yes", "No", "Cancel" and returns the user's choice.
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.
ContactCreateDisplays the contact creation window of the device's native contact management application (Android, iPhone or iPad).
ContactDisplayOpens the form of a contact in the native application for contact management of the device (Android, iPhone or iPad).
ContactEditOpens a current contact record in the device's native contact management application (Android, iPhone or iPad).
ContactSelectMuestra la lista de contactos encontrados en el dispositivo (Android, iPhone o iPad).
DatePickerAbre el selector de fecha del sistema.
DialogDisplays a message box and returns the value of the button clicked by the user.
DialogAsynchronousMuestra un cuadro de mensaje no bloqueante y llama a un procedimiento WLanguage con el valor del botón pulsado por el usuario.
EmailOpenMailOpens the default messaging software:
  • of Web user on the browser computer.
  • of the user on the current Windows computer.
  • on the phone.
EmailRunAppStarts the native application for sending emails found on the current computer:
  • Computer running Windows,
  • Mobile device (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.
ErrorBuildDisplays a custom error message in a system error window.
ExeRunExecutes a program (an executable file, for example) from the current application.
FBStartSessionPermite autenticarse e iniciar sesión en Faceboook.
geoRunAppInicia la aplicación nativa de mapas del dispositivo para visualizarla:
  • una ubicación geográfica específica,
  • una ruta entre dos lugares.
GglPrintDocumentPrints a document (text or PDF file, images, Word or Excel document, ...) by using the Cloud Print service of Google.
gpwAuthLoginAllows you to log in to the User Groupware using an account such as Facebook, Google, Microsoft, etc.
inAppPurchaseProductSends a request for purchasing an "In-App" product associated with the application.
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.
InfoBuildDisplays a custom message in a system information window.
InputDisplays a message allowing the user to type an information.
KioskDisableDesactiva el modo kiosco para la aplicación actual.
KioskEnableCambia la aplicación Android en curso a modo kiosco.
NFCReadTagStarts reading an NFC tag or enables the detection of NFC tags for the current window.
NFCSendTagSends an NFC tag to another device.
NFCWriteTagStarts writing data to an NFC tag.
OKCancelDisplays a message in a standard dialog box that proposes "OK" and "Cancel" and returns the user's choice.
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.
ShellExecuteOpens a document in its associated application.
SMSRunAppStarts the native application for sending SMSs found on the device (Android or iPhone/iPad).
SpeechRecognitionTriggerTriggers the device's speech recognition service.
SpeechSynthesisInitializeInitializes the parameters of speech synthesis for the current application.
SpeechSynthesisReadFileReads the content of the specified file by using the engine for speech synthesis found on the device.
SpeechSynthesisReadTextReads the specified text using the device's text-to-speech engine.
StartShareOpens a popup allowing you to select the application that will be used to share a resource (text or 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.
  • Solicita al usuario que desactive la optimización de la batería para una aplicación determinada del dispositivo.
Esta función puede utilizarse para indicar al sistema operativo que deje de impedir que la aplicación se ejecute en segundo plano.
tapiDialerCallOpens the default telephony application (dialer) found on the phone and dials the specified number.
tapiDialerDisplayAbre la aplicación de telefonía predeterminada (marcador) y muestra el número especificado.. No se realiza ninguna llamada.
TimePickerAbre el selector de hora del sistema.
URISelectOpens a system window to select a resource from:
  • from the device file system,
  • from the Cloud (Google Drive, Microsoft OneDrive, etc.)
  • or from one of the content managers installed on the device.
VideoStartAppStarts the device's native camera application to record a video or to take a photo.
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: 15/09/2024

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