Получить путь к ресурсам Android
Мой вопрос: возможно ли получить абсолютный путь к ресурсу (в подкаталоге res/folder) в Android?
Большинство ответов, которые я вижу на этот вопрос в google, предлагают получить дескриптор файла, подразумевая, что это невозможно.
Это?
EDIT: Причина, по которой я хочу это сделать, заключается в том, что я пишу классы, которые принимают путь к медиа и воспроизводят его. Тестирование было бы намного проще, если бы я мог пройти абсолютный путь ресурса.
Ответы
Ответ 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