2011-06-10 12 views
31

Mi pregunta es: ¿es posible obtener la ruta de acceso absoluta de un recurso (en un subdirectorio de la carpeta res /) en Android?Obtener ruta del recurso de Android

La mayoría de las respuestas que veo a esta pregunta en google sugieren obtener un descriptor de archivo, lo que implica que esto no es posible.

¿Lo es?

EDITAR: La razón por la que quiero hacer esto es porque estoy escribiendo clases que aceptan un camino a los medios y lo reproduzco. Las pruebas serían mucho más fáciles si pudiera pasar la ruta absoluta de un recurso.

+0

debe marcar la respuesta de HPP como la correcta. El que marcó no es correcto –

+1

@LeonardoAcevedo hecho. – Prime

Respuesta

28

Use URI Caminos en lugar de ruta "absoluta", ver this post

Uri path = Uri.parse("android.resource://com.segf4ult.test/" + R.drawable.icon); 
Uri otherPath = Uri.parse("android.resource://com.segf4ult.test/drawable/icon"); 

o uso openRawResource (R.id) para abrir un InputStream y úselo de la misma forma que utilizaría un FileInputStream (solo lectura)

+0

Recibo el formato de archivo de error no admitido. – NarendraJi

+0

¿qué tipo de archivo es? – HPP

14

No es posible. La carpeta de recursos que ve está compilada en la apk, y es posible que ni siquiera la almacene como está. (Por ejemplo, los archivos XML de diseño ya no son archivos XML, una vez que se compila)

Dos posible solución/trabajo en torno a su situación:

  1. empuje el archivo que necesita en una ubicación conocida (como/mnt/sdcard/...) con herramientas de SDK
  2. Crear un proveedor de maqueta para su gestor de medios de comunicación que acepta cosas en recursos prima en lugar de ruta, para su propósito de prueba
+2

Esto no parece correcto. Acabo de probar la respuesta de HPP y funciona muy bien. – PEZ

+0

La respuesta sugerida por HPP es su mejor enfoque. – user210504

+0

La respuesta de HPP muestra la forma correcta. – Ghashange

6

en general, NO. Como se repitió varias veces aquí, debe acceder a ellos a través de los recursos.

Dicho esto, hay formas que puede evitar que:

  • copiar los archivos de res/activos al almacenamiento interno en la primera ejecución.
  • use adb para enviar los archivos a cualquier ubicación pública, como la tarjeta sd (tenga en cuenta que no se recomienda utilizar rutas absolutas, ya que no todos los dispositivos pueden montar las unidades en la misma ubicación)
  • use a arraigada teléfono y acceder a cualquier carpeta, por ejemplo, /data/data/yourapp/ o /tmp/

en cualquier caso, se debe comprobar con respecto a una solución que muy probablemente no va a funcionar en la mayoría de los dispositivos. Le sugiero que siga las indicaciones de la guía dev: http://developer.android.com/guide/topics/data/data-storage.html

+0

Por favor, consulte la respuesta de HPP, usted escribió su respuesta 2011, ¿todavía se atiene a su respuesta? – user1767754

Cuestiones relacionadas