![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Tu problema tiene que ver con cambios importantes que introdujo Android 10 (API 29) en cuanto al acceso al almacenamiento. Desde esa versión, el sistema restringe muchísimo el acceso libre al sistema de archivos, especialmente a las rutas externas como /sdcard, incluso si le das permisos manuales.
🔒 ¿Qué cambió en Android 10? Google introdujo Scoped Storage, que hace que las apps ya no puedan acceder libremente a la memoria externa. Las apps sólo pueden acceder: A sus propias carpetas internas (/data/data/tu.app.paquete/). A su carpeta de almacenamiento externo privado (/Android/data/tu.app.paquete/). A archivos del sistema de archivos externos públicos, como fotos, pero usando mecanismos especiales (como el Storage Access Framework o MediaStore). 🛑 Por eso no te sirve el permiso "READ_EXTERNAL_STORAGE" como antes. Incluso si le das permiso manual, Android 10 y superior bloquea el acceso tradicional a carpetas como /storage/emulated/0/ o /sdcard/ si no lo haces mediante las nuevas APIs que ellos permiten. ✅ ¿Qué soluciones hay en Delphi 10.3.3? Delphi 10.3.3 es algo limitado, ya que no soporta directamente las nuevas APIs de Android 10 como Scoped Storage o Storage Access Framework. Pero aquí hay opciones que puedes intentar: 🛠️ 1. Usa requestLegacyExternalStorage en AndroidManifest.xml Esto le dice a Android 10 que tu app quiere usar el comportamiento anterior, como si fuera Android 9. Se hace agregando esto en el AndroidManifest.template.xml de tu proyecto, dentro del tag <application>: Código:
android:requestLegacyExternalStorage="true" Código:
<application android:requestLegacyExternalStorage="true" android:label="%label%" android:icon="@mipmap/ic_launcher"> Además de poner el permiso en el manifest, también necesitas solicitarlo en tiempo de ejecución. Algo como esto:
📦 3. Si necesitas Android 11 o superior: usa SAF o MediaStore (no directo con Delphi 10.3.3) Esto ya implica hacer integración con Java nativo, o migrar a una versión más moderna de Delphi (como Delphi 11.3 o 12) que sí soporta acceso mediante SAF o integraciones modernas. ✅ Recomendaciones resumidas: Añade android:requestLegacyExternalStorage="true" en el Manifest. Asegúrate de pedir permisos en tiempo de ejecución. Limita el acceso a carpetas como Environment.getExternalStorageDirectory() o getExternalFilesDir(). Si puedes, actualiza a Delphi 11+ para soporte más fácil con Android moderno. Evita tratar de escanear toda la memoria externa, porque eso está muy restringido en versiones modernas. |
#2
|
||||
|
||||
revisare lo que has comentado luego comentare si me resulto
|
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Aplicacion Firemonkey sin permiso para lectura-escritura archivo.fdb en macOS | el-mono | FireMonkey | 0 | 20-04-2021 02:32:24 |
Lectura y escritura de un XML | lmpadron | C++ Builder | 5 | 14-10-2012 21:29:12 |
lectura y escritura en un archivo de texto | torito | Varios | 4 | 18-01-2010 10:10:11 |
Dar permiso de lectura a carpeta en servidor | fdelamo | API de Windows | 0 | 14-12-2005 08:55:44 |
Lectura Escritura de puertos | daseretto | Varios | 4 | 19-04-2004 16:24:27 |
![]() |
|