获取Android资源的路径

Pri*_*ime 36 resources android absolute-path

我的问题是:是否有可能在Android中获取资源的绝对路径(在res /文件夹的子目录中)?

我在谷歌上看到这个问题的大多数答案建议获取文件描述符,暗示这是不可能的.

是吗?

编辑:我想这样做的原因是因为我正在编写接受媒体路径并播放它的类.如果我可以传递资源的绝对路径,那么测试会容易得多.

HPP*_*HPP 32

使用URI路径而不是"绝对"路径,请参阅此文章

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

或者使用openRawResource(R.id)打开一个inputStream,并以与使用FileInputStream(readonly)相同的方式使用它


xan*_*ndy 13

不可能.您看到的资源文件夹被编译到apk中,甚至可能不会存储.(例如,那些布局xml文件在编译后不再是xml文件)

两种可能的解决方案/解决方案适用于您的情况:

  1. 使用sdk工具将您需要的文件推送到已知位置(例如/ mnt/sdcard/...)
  2. 为您的测试目的,为您的媒体加载器创建一个模型提供程序,它接受原始资源而不是路径中的内容

  • 这似乎不正确.我刚试过HPP的答案,效果很好. (2认同)

Ale*_*dam 6

一般来说,NO.由于这里重复了几次,您需要通过资源访问它们.

也就是说,有一些方法可以解决这个问题:

  • 首次运行时,将文件从res/assets复制到内部存储.
  • 使用adb将文件推送到任何公共位置,例如SD卡(注意,不建议在那里使用绝对路径,因为并非每个设备都可以将驱动器安装到同一位置)
  • 使用有根电话,并访问任何文件夹,例如,/data/data/yourapp//tmp/

在任何情况下,您都要测试一种很可能在大多数设备中不起作用的解决方案.我建议您按照开发指南中的说明进行操作:http://developer.android.com/guide/topics/data/data-storage.html