Obtener la ruta del recurso de Android

Mi pregunta es: ¿es posible obtener la ruta absoluta de un recurso (en un subdirectorio de la carpeta res /) en 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 una ruta a los medios y la reproduzco. Las pruebas serían mucho más fáciles si pudiera pasar la ruta absoluta de un recurso.

Usar rutas de URI en lugar de rutas “absolutas”, ver esta publicación

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

O use openRawResource (R.id) para abrir un inputStream, y úselo de la misma manera que usaría FileInputStream (solo lectura)

Imposible. La carpeta de recursos que ve está comstackda en la apk, y es posible que ni siquiera la almacene como está. (por ejemplo, esos archivos xml de diseño ya no son archivos xml una vez que se comstack)

Dos posibles soluciones / soluciones para su situación:

  1. Empuje el archivo que necesita a una ubicación conocida (como / mnt / sdcard / …) con las herramientas de sdk
  2. Cree un proveedor de maquetas para su cargador de medios que acepte cosas en recursos sin procesar en lugar de rutas, para su propósito de prueba

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

Dicho esto, hay formas de evitarlo:

  • copie los archivos de res / assets al almacenamiento interno en la primera ejecución.
  • utilice 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)
  • utilizar un teléfono rooteado y acceder a cualquier carpeta, por ejemplo, /data/data/yourapp/ o /tmp/

En cualquier caso, probaría una solución que probablemente no funcionará en la mayoría de los dispositivos. Le sugiero que siga las instrucciones de la guía de desarrollo: http://developer.android.com/guide/topics/data/data-storage.html