Подтвердить что ты не робот

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

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

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

Это?

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

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

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

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

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