2011-06-10 132 views
31

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

大多数我看到这个问题对谷歌的答案建议得到文件描述符,这意味着这是不可能的。

是吗?

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

+0

您应该将HPP的答案标记为正确答案。您标记的那个不正确 – 2017-04-25 19:12:57

+1

@LeonardoAcevedo完成。 – Prime 2017-04-27 17:30:01

回答

28

使用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相同的方式使用它(只读)

+0

我收到不支持的错误文件格式。 – NarendraJi 2016-06-02 08:57:18

+0

是什么样的文件呢? – HPP 2017-01-20 02:15:58

14

不可能。您看到的资源文件夹已编译到apk中,甚至可能不会保存原样。 (如那些布局的xml文件不再XML文件一旦被编译)

两个可能的解决方案/变通您的具体情况:

  1. 推你需要一个已知位置的文件(如/ MNT/SD卡/ ...)与SDK工具
  2. 创建您的媒体加载器样机供应商接受的东西,在原料资源,而不是路径,为您的测试目的
+2

这看起来不正确。我只是试过HPP的答案,它效果很好。 – PEZ 2014-04-29 16:57:37

+0

HPP建议的答案是您的最佳方法。 – user210504 2014-06-22 18:20:29

+0

HPP的答案显示了正确的方法。 – Ghashange 2014-12-09 19:40:29

6

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

这就是说,有办法可以解决的是:

  • 复制的文件从资源/资产,在第一次运行时的内部存储。
  • 使用adb将文件推送到任何公共位置,例如sdcard(请注意,由于不是每个设备都可能将驱动器安装到同一位置,因此也不鼓励在其中使用绝对路径)
  • 使用扎根电话,并访问任何文件夹,例如,/data/data/yourapp//tmp/

在任何情况下,你将测试针对的是最有可能不是在大多数设备上工作的解决方案。我建议你遵循开发者指南的指示:http://developer.android.com/guide/topics/data/data-storage.html

+0

请参阅HPP的答案,你写了你的答案2011,你仍然坚持你的答案? – user1767754 2015-04-28 09:29:47