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.

¿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

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?

  • Obtenga coordenadas GPS: Android
  • Nuevo SDK de Google Analytics 4
  • Cómo resolver java.net.BindException: error de enlace: EADDRINUSE (Dirección ya en uso)
  • Intellij IDEA se estrelló, y ahora lanza un error
  • ¿Cómo se guardan las imágenes de Amazon S3 desde la cámara Android?
  • Variedad de errores HTTPs al comunicarse con el servidor desde la aplicación Android
  • CursorIndexOutOfBoundsException en android
  • Forzar subclases para establecer una variable en java
  • Cómo agregar cookies (encabezado) en la vista de vídeo de Android para admitir las versiones anteriores de android atleast till jellybean
  • Pasar un objeto JavaScript usando addJavascriptInterface () en Android
  • Simple-XML analiza el feed RSS con 2 que se declara dos veces
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.