AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

Este contenido se ha traducido automáticamente.  Haga clic aquí  para ver la versión en inglés.
Ayuda / Desarrollar para Android
  • Presentación
  • Recordatorio: nivel de API al que se orienta la app ("TargetSdkVersion")
  • Aplicaciones que solicitan permisos de ubicación en segundo plano
  • Aplicaciones que requieren acceso a archivos
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
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.
Las aplicaciones tendrán los siguientes cambios:
  • Geolocalización: No se pueden combinar los permisos ACCESS_FINE_LOCATION y ACCESS_BACKGROUND_LOCATION en una sola operación. Esto implica un cambio en el código de las aplicaciones que utilizan la ubicación en segundo plano.
  • Acceso a los archivos: las aplicaciones de Android 11 ya no pueden acceder a los archivos creados por otra aplicación utilizando las rutas de archivos. Esto implica una verificación de los procesos de manejo de archivos y cambios en el código, si es necesario.
  • Limitaciones de acceso a las direcciones Mac: La función NetMACAddress ya no está disponible. Siempre devuelve una cadena vacía.

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.
Para obtener más información, consulte el sitio de Google.
Aplicaciones que solicitan permisos de ubicación en segundo plano
A partir de WINDEV Mobile 26 Update 3, solo se integrarán los permisos de ubicación (ACCESS_FINE_LOCATION o ACCESS_COARSE_LOCATION) al generar la aplicación, si es necesario.
Para las aplicaciones que requieren acceso a la ubicación en segundo plano, es necesario:
  1. Agregar manualmente el permiso "ACCESS_BACKGROUND_LOCATION" en el asistente de generación de la aplicación Android.
  2. Solicitar explícitamente el permiso de ubicación en segundo plano con la función PermissionRequest. Por ejemplo:
    PermissionRequest(permBackgroundLocation, Callback)
    INTERNAL PROCEDURE Callback(p is Permission)
    IF p.Granted THEN
    // Functions that require background location access can be used
    END
    END
Observaciones:
  • Siga las directrices de Google para las aplicaciones que requieren acceso a la ubicación en segundo plano. Para obtener más información, consulte https://support.google.com/googleplay/android-developer/answer/9799150. Si no se cumplen estas condiciones (especialmente los requisitos de información del usuario), es posible que no se acepte la publicación de las aplicaciones en Google Play.
  • El permiso de ubicación en segundo plano solo debe solicitarse si se ha concedido el permiso de ubicación. De lo contrario, la función PermissionRequest fallará.
  • Si la opción elegida por el usuario para la solicitud de acceso a la ubicación en segundo plano es más restrictiva que la opción elegida para la primera solicitud de acceso a la ubicación, la aplicación se reiniciará automáticamente.
  • En dispositivos con Android 10 o anterior, si se ha concedido el permiso de ubicación a la aplicación, el permiso de ubicación en segundo plano se concederá sin mostrar una ventana.
  • Las funciones WLanguage correspondientes son las siguientes:
    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.
Aplicaciones que requieren acceso a archivos
Hasta Android 10, las aplicaciones pueden leer y escribir archivos:
  • en los directorios de la aplicación en el almacenamiento interno (fCurrentDir, fExeDir, fDataDir)
  • casi en cualquier lugar del almacenamiento externo :
    • estructura jerárquica personalizada a partir de la raíz del almacenamiento externo devuelto por la función SysDirStorageCard
    • en los directorios de la aplicación en el almacenamiento externo: función SysDirExternalStorage con las constantes sseAppXXX.
    • en directorios públicos: Documents, Download, Images, etc. en el almacenamiento externo: función SysDirExternalStorage con las constantes ssePublicXXX.Las aplicaciones Android pueden acceder a los archivos creados por otras aplicaciones en el almacenamiento externo sin restricciones.
Cuando la aplicación se utiliza en un dispositivo que ejecuta Android 11, aparecen nuevas restricciones:
  • las aplicaciones ya no pueden leer o escribir archivos en el almacenamiento externo fuera de:
    • directorios públicos como "Documentos", "Descargas", "Imágenes", etc..: utilizar SysDirExternalStorage con las constantes ssePublicXXX.
    • directorios específicos de la aplicación: utilizar SysDirExternalStorage con las constantes sseAppXXX.
  • en los directorios públicos, una aplicación sólo puede acceder (en modo de lectura o escritura) a los archivos que ha creado.
    Observación: si la aplicación se desinstala y se vuelve a instalar, ya no tendrá acceso a los archivos creados por la versión previamente instalada en los directorios públicos del almacenamiento externo.
Esto significa que las aplicaciones ya no pueden acceder a los archivos creados por otra aplicación utilizando su ruta. El usuario final debe seleccionar los archivos a los que la aplicación puede acceder. Es posible mostrar un selector de archivos utilizando la función URISelect y luego manipular el archivo por el URI devuelto por la función.
Asimismo, SysDirStorageCard y la constante ssePublic de la función SysDirExternalStorage (directorio raíz de almacenamiento externo) no deben utilizarse en los nuevos proyectos de desarrollo.
Sin embargo, existe un permiso especial para override estas restricciones: GESTIONAR_ALMACENAMIENTO_EXTERNO. Para activarlo, debe:
  • Añade manualmente el MANAGE_EXTERNAL_STORAGE Permission en la generación de la aplicación Android asistente.
  • Solicitar explícitamente el acceso al almacenamiento externo mediante PermissionRequest. Por ejemplo:
    PermissionRequest(permManageExternalStorage, Callback)
    INTERNAL PROCEDURE Callback(p is Permission)
    IF p.Granted THEN
         // Functions that require external storage access can be used
    END
    END
Esta solicitud de Permission no abre la ventana emergente estándar de Permission, sino que abrirá una ventana del sistema para permitir que la aplicación acceda a todos los archivos del almacenamiento externo sin restricciones.
Atención: si la aplicación se va a publicar en Google Play, se debe justificar el uso de esta Permission. Sólo se permiten aplicaciones de gestión de archivos, antivirus o gestores de copias de seguridad. En otros casos, si se utiliza esta Permission, es muy probable que se rechace la publicación.
Solución alternativa (sólo para aplicaciones existentes) : Añadir el atributo preserveLegacyExternalStorage al manifiesto de la aplicación. El Process para añadir el atributo preserveLegacyExternalStorage a una aplicación se detalla en la FAQ 21 548: ¿Cómo permitir que una aplicación existente acceda a los archivos del almacenamiento externo? (atributo preserveLegacyExternalStorage).
Esto permite mantener las mismas reglas de acceso que antes del cambio de nivel de API, pero sólo será efectivo para las aplicaciones existentes. En el caso de las aplicaciones nuevas o de las que se desinstalan y se vuelven a instalar, esta opción se ignorará.
Versión mínima requerida
  • Versión 26
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 28/01/2023

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