【问题标题】:Get path of Android resource获取Android资源路径
【发布时间】:2011-09-12 04:33:42
【问题描述】:

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

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

是吗?

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

【问题讨论】:

标签: android resources absolute-path


【解决方案1】:

使用 URI 路径而不是“绝对”路径,请参阅 this post

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 文件)

针对您的情况的两种可能的解决方案/解决方法:

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

【讨论】:

  • 这似乎不正确。我刚刚尝试了 HPP 的答案,效果很好。
  • HPP 建议的答案是您最好的方法。
【解决方案3】:

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

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

  • 首次运行时将文件从 res/assets 复制到内部存储。
  • 使用 adb 将文件推送到任何公共位置,例如 sdcard(注意,也不鼓励在其中使用绝对路径,因为并非每个设备都可以将驱动器安装到同一位置)
  • 使用root手机,访问任何文件夹,例如/data/data/yourapp//tmp/

在任何情况下,您都会针对在大多数设备中很可能无法正常工作的解决方案进行测试。我建议您按照开发指南中的指示进行操作:http://developer.android.com/guide/topics/data/data-storage.html

【讨论】:

  • 请看 HPP 的答案,你在 2011 年写了你的答案,你还在坚持你的答案吗?
猜你喜欢
  • 2020-12-09
  • 2013-01-06
  • 1970-01-01
  • 1970-01-01
  • 2021-04-24
  • 2012-04-11
  • 2012-05-13
  • 2013-07-09
  • 2020-09-09
相关资源
最近更新 更多