Получить путь ресурса Android - PullRequest
35 голосов
/ 10 июня 2011

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

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

Это?

РЕДАКТИРОВАТЬ: Причина, по которой я хочу это сделать, заключается в том, что я пишу классы, которые принимают путь к медиа и воспроизведенияЭто.Тестирование было бы намного проще, если бы я мог передать абсолютный путь ресурса.

Ответы [ 3 ]

31 голосов
/ 24 октября 2013

Используйте пути 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 (только для чтения)

13 голосов
/ 10 июня 2011

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

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

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

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

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

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

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

...