2011-06-10 130 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