Получить путь к ресурсу Android

мой вопрос: Можно ли получить абсолютный путь ресурса (в подкаталоге res/ folder) в Android?

большинство ответов, которые я вижу на этот вопрос в google, предлагают получить файловый дескриптор, подразумевая, что это невозможно.

- Это он?

EDIT: причина, по которой я хочу это сделать, заключается в том, что я пишу классы, которые принимают путь к медиа и воспроизводят его. Тестирование было бы намного проще, если бы я мог пройти абсолютный путь ресурс.

3 ответов


используйте пути URI вместо "абсолютного" пути, см. этот пост

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

или используйте openRawResource (R. id) для открытия inputStream и используйте его так же, как вы бы использовали FileInputStream (только для чтения)


не возможно. Папка ресурсов, которую вы видите, скомпилирована в apk, и она может даже не храниться как есть. (например, эти XML-файлы макета больше не являются xml-файлами после его компиляции)

два возможных решения / обходной путь для вашей ситуации:

  1. нажмите файл, который вам нужен в известном месте (например, /mnt / sdcard/... ) с sdk tools
  2. создайте поставщика макета для вашего загрузчика носителей, который принимает материал в сырье, а не путь, для вашего цель тестирования

В общем, нет. Как здесь повторялось несколько раз, вам необходимо получить к ним доступ через ресурсы.

тем не менее, есть способы обойти это:

  • скопируйте файлы из res / assets во внутреннее хранилище при первом запуске.
  • используйте adb для перемещения файлов в любое общедоступное место, например sdcard (обратите внимание, что там также не рекомендуется использовать абсолютные пути, так как не каждое устройство может монтировать диски в одно и то же местоположение)
  • используйте корневой телефон и получите доступ к любой папке, например,/data/data/yourapp/ или /tmp/

в любом случае вы протестируете решение, которое, скорее всего, не будет работать на большинстве устройств. Я предлагаю вам следовать инструкциям из руководства dev:http://developer.android.com/guide/topics/data/data-storage.html