[Observacion] Comportamiento de Diropen, en Windows y Android.

Started by alicesimu, November 13, 2016, 02:09:03 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

alicesimu

buenas

quiero explicar la diferencia de comportamiento del comando Diropen y compañia:
http://wiki.bennugd.org/index.php?title=Diropen

en Windows y Android (probando en 2 modelos diferentes de android)


-Windows
Diropen devuelve 0> un numero positivo, si es accesible para ser escaneado,
dirread devuelve los 2 archivos de control: "." ".." cuando buscamos "*.*" , es normal ese comportamiento.
Funciona bien.

-Android, SO: 6.0.1 CM13 en Sony Xpiera SP
Esta prueba se realiza en el AlmacenamientoExterno/Interno, ruta de memoria interna del movil(en mi caso).
Diropen devuelve 0< un numero negativo, si es accesible para ser escaneado,
dirread devuelve los ficheros que hubiera  :D , de lo contrario nada, pero no lista los ficheros de control "." , ".."(o no existen o estan ocultos), cuando buscamos "*.*" . creo que es normal ese comportamiento.
Funciona bien.


Prueba realizada en ruta preteminada de la aplicacion, sin usar  AlmacenamientoExterno/Interno.
Diropen devuelve =0 , que no puede tener acceso a la ruta, que no existe (dentro del APK si existe la ruta). Parece que lee un directorio inexistente, pero se considera el espacio de datos de la aplicacion instalada. No tiene acceso al contenido de la APK instalada usando esta funcion de diropen.
En este caso es fallida.

-Android, SO: 4.4.2 SAMSUNG S4 MINI

Esta prueba se realiza en el AlmacenamientoExterno/Interno, ruta de memoria interna del movil(en mi caso).
Diropen devuelve =0 , que no puede tener acceso a la ruta, parece que no tenga permisos de leer el contenido de la carpeta.
En este caso es fallida.

Prueba realizada en ruta predeterminada de la aplicación, sin usar  AlmacenamientoExterno/Interno.
Da el mismo resultado que el anterior.
En este caso es fallida.

----------------------------

En Android, la cosa es que va de permisos sobre leer un directorio externo,
tambien si puede o no acceder a una carpeta que esta en el APK instalada no es accesible.

Existe 3 accesos realmente:
-Contenido de APK instalada, solo lectura. diropen no puede tener acceso a ella...(desconozco su ruta en S.O: Android)
-Contenido data de la aplicacion, viene vacia por defecto, espacio reservado para guardar configuracion, partidas...
diropen puede leer este contenido realmente, debe existir la carpeta en ella o los ficheros a escanear.
-Contenido externo "AlmacenamientoExterno"(en mi caso es el AlmacenamientoInterno) y es visible para explorador de fichero y Windows. Espacio de almacenamiento adicional que el usuario puede acceder a ella , añadir y quitar ficheros.
diropen puede leer el contenido, (depende del dispositivo android, tiene o no permiso a escanear el contenido).

SplinterGU

muy buena idea la de ir compartiendo experiencias en forma de observaciones...

gracias!
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Y tanto, como que me vienen de perlas estos comentarios para cuando tenga que añadir cosas al programa o darle la posibilidad al usuario de ello :D
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

alicesimu

Es el primer vistazo para programar para android concreta mente,
Pero ya lo aplico con mi proyecto/juego, esta en fase beta este tema aun por terminar de investigar un comportamiento de forma seguida, es decir de uso continuo, muchas peticiones de lectura y escritura a estos medios que nos ofrece android.

Aprender si REAL mente es necesario tener acceso a la memoria externa(Almacenamiento interno), para nuestro proyecto, hay que mirar al detalle de nuestras necesidades a la hora del diseñar nuestro juego o programa.
Mirando para el usuario sera el único que tendrá acceso a la memoria externa, por exploradores comunes ,y contectando al pc.
Un usuario medio.

Un usuario avanzado puede acceder vía protocolo adb o root explorer a las carpetas de almacenamiento tipo "data". Yo lo encontré la ruta donde se almacena.

Por default seria el almacenamiento de "datos" perfecto para guardar las partidas salvadas y ajustes, y otro contenido generado o descargado(modulo curl)...
Se mantiene todos los datos de este almacenamiento cuando actualizamos la app. Eso e bueno.
Recomiendo añadir a la cabezera del fichero de configuración y partida salvada, el numero de versión que corresponde el juego/programa, es para saber si es necesario tener un orden de carga de datos fread/fgets en determinado orden.
Al salvar los cambios a la ultima versión fwrite/fputs en el orden mas actual que hemos preparado.
A todo esto es para añadir características que necesitamos guardar en los ficheros.

Es una cosa que aprendí no hace mucho tiempo.
Es un consejo.

josebita

Buenas alicesimu:

Mil gracias por tus comentarios. Me los he leído en diagonal, pero creo que merece la pena leerlos con más cariño, me lo apunto (estoy a tope en un montón de frentes...). En todo caso, lo que dices es muy cierto: en general los juegos de Android no deberían tener que escribir a la SD.

Existe un directorio donde cada aplicación (y, en principio, sólo esa aplicación) puede y debe escribir sus datos, preferencias... y en PixTudio se puede obtener con la función get_pref_path de mod_dir. Funciona en todos los sistemas operativos soportados y es para determinar dónde el juego debe echar sus cosas.

Sonará a viejuno, pero eso de escribir en la tarjeta SD "sin más" es como cuando las aplicaciones dejaron de funcionar al llegar Windows XP porque escribían todas sus cosas en el directorio de instalación...

alicesimu

desconocia esta funcion: get_pref_path de mod_dir
tampoco no se donde sacar info de uso:
https://pixtudio.divhub.org/docs/

por default la carpeta de trabajo la considera su raiz / (segun el comando cd()), pero no del sistema, si no de su carpeta data privada, solo para la app.
dentro se guardan las cosas, por ahora ficheros...
carpetas no deja crear por ahora...

es su espacio personal para guardar las cosas que necesita gestionar, normalmente lo que el usuario genera(partidas salvadas) y archivos de configuracion del propio juego.


El tema de usar el Almacenamiento externo, es una carateristica que permite añadir al juego: Addons personalizados por el propio usuario, estas cosas pueden ser:
Musica, graficos en png(para algun contenido, skin...), Mapas descargadas de manera externa(mapas editadas por un editor externo).
Cualquier cosa que un usuario se le da permiso de: Personalizar y añadir mas contenido personalizado(creado por otros usuarios)

Es como esa carpeta de Donwoads del juego de Los Sims, (hasta permitia mods....).

Naturalmente esto es opcional, no es obligatorio.

En el juego decides si usarlo o no, activarlo o desactivarlo.
No deja de ser una manera de añadir contenido personalizado por usuario. (no por el propio juego/desarrollador por actualizaciones, o de su propia pagina de descarga...).

Drumpi

Estoy con alicesimu: la memoria de los teléfonos móviles es tan tan tan escasa que apenas instalas tres aplicaciones te quedas sin espacio, y sin embargo, tienes como 3GB libres para datos más los que añadas de una SD externa, pero claro, no son el espacio de aplicaciones.
Por eso es necesario poder acceder a esa sección de datos externa y, en ocasiones, la SD.

En mi caso, quiero hacer un programa en el que se puedan importar imágenes, y alguien sin root sólo lo puede hacer desde la "partición" de datos o de la SD externa. Lo mismo se aplica para ficheros de preguntas-respuesta creados por los usuarios, para que se puedan compartir no sólo a través de red (aunque no voy a tener servidor para ello), sino de red wifi o por bluetooth.

Y de paso, ahorrar ese espacio de la partición de "aplicaciones" ¿he dicho ya que es muy escasa? :D
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

josebita


alicesimu