Accediendo contenido de res / raw programatically (Android)
Estoy trabajando en una aplicación para Android con algunas otras personas, y el contenido principal es especificado por nuestros diseñadores como archivos de texto en un determinado formato de archivo, que luego analizar, procesar y servir en la aplicación. Actualmente estamos almacenándolos en res/raw
.
Esto hace que las cosas sean geniales para los diseñadores porque cuando quieren agregar contenido, simplemente agregan un archivo a res/raw
. Esto es molesto como desarrollador, sin embargo, ya que los desarrolladores entonces necesitan agregar R.raw.the_new_file
a una matriz en el código que especifica qué archivos procesar en el inicio.
- Android: enorme diferencia en el consumo de memoria cuando se utiliza drawable vs drawable-nodpi carpetas
- Cursor while loop devuelve cada valor pero el último
- Google Maps no se muestra de repente en Android
- implementa OnScrollListener dentro de listFragment
- Almacenamiento en caché de archivos de guayaba
¿Hay una manera de acceder a los ID de recurso de res/raw
programatically? Idealmente, cuando la aplicación se inicia, podríamos hacer una llamada para ver qué archivos están en res/raw
, proceso de todos ellos, por lo que podría eliminar la pequeña sobrecarga con la coincidencia de los contenidos de res/raw
con la de nuestra matriz en el código .
El camino más prometedor que he visto es getAssets
de los recursos , que me dejaría llamar list(String)
en el AssetManager , pero he tenido problemas para que esto funcione, sobre todo porque no se puede llamar directamente "res/raw"
Como su filepath (o al menos, no ha funcionado cuando lo he intentado.
Sugerencias? Gracias
- Obtener Elementos de JSON Array Android
- Android 2.2 Webview hace que OpenGL ES API no tenga ningún contexto actual (registrado una vez por hilo)
- ¿Cómo puede convertir el archivo XML local a org.ksoap2.serialization.SoapObject?
- ¿Cómo obtener los datos de Firebase Push Notification y mostrarlos en tu actividad de Android?
- RxJava noClassDefFoundError: rx.plugins.RxJavaPlugins en la API 16
- ¿Cuál es el propósito de `convertView` en el adaptador ListView?
- Android piensa que no estoy cerrando mi base de datos! ¿Por qué?
- Formato de doble Android
Usted podría utilizar la reflexión.
ArrayList<Integer> list = new ArrayList<Integer>(); Field[] fields = R.raw.class.getFields(); for(Field f : fields) try { list.add(f.getInt(null)); } catch (IllegalArgumentException e) { } catch (IllegalAccessException e) { }
Después de esa lista contiene todos los identificadores de recursos en la carpeta res / raw. Si necesita el nombre del recurso … f.getName () lo devuelve.
Esta respuesta puede ser un poco tarde, debe utilizar la carpeta de activos en su lugar. Allí puede tener una jerarquía de carpetas y leerla como un sistema de archivos.
Para su información getAssets devuelve un gestor de archivos en la carpeta "assets" de su proyecto de Android y no en "res / raw". "Res / raw" entra en el paquete "R" Java. Assets.list (path) Devuelve una matriz de archivos en la carpeta dada en relación con su carpeta de activos. La carpeta del activo tampoco es una carpeta tradicional, pero Android la abstrae para que se "sienta" como archivos regulares. Esto se vuelve más importante si usted está haciendo JNI y desea leer sus activos de c / c ++.
Podrías usar
Context.getResources().getIdentifier("filename", "raw", "packagename");
Para obtener el identificador apropiado. Sin embargo, no entiendo por qué implementar su solución que complicado? ¿Cuáles son las ventajas para el diseñador? ¿Por qué no sólo poner los archivos en la carpeta estirable?
- Corregir errores de Eclipse al utilizar Android NDK y std :: vector
- Indicador de pestaña personalizada (con la flecha hacia abajo como indicador)