1. 程式人生 > >Android 開發中使用getAssets獲取不到檔案的問題

Android 開發中使用getAssets獲取不到檔案的問題

assets和res ,java 是在同一層目錄

此外還有該目錄下放置的原生資原始檔

      因為系統在編譯的時候不會編譯assets下的資原始檔,所以我們不能通過R.XXX.ID的方式訪問它們。那我麼能不能通過該資源的絕對路徑去訪問它們呢?因為apk安裝之後會放在/data/app/**.apk目錄下,以apk形式存在,asset/res和被繫結在apk裡,並不會解壓到/data/data/YourApp目錄下去,所以我們無法直接獲取到assets的絕對路徑,因為它們根本就沒有。

1.載入assets目錄下的網頁
2.訪問assets目錄下的資原始檔
3.獲取assets的檔案及目錄名
4.將assets下的檔案複製到SD卡
5.使用assets目錄下的圖片資源
6.播放assets目錄下的音樂

*res/raw和assets的相同點:

1.兩者目錄下的檔案在打包後會原封不動的儲存在apk包中,不會被編譯成二進位制。


*res/raw和assets的不同點:
1.res/raw中的檔案會被對映到R.java檔案中,訪問的時候直接使用資源ID即R.id.filename;assets資料夾下的檔案不會被對映到R.java中,訪問的時候需要AssetManager類。
2.res/raw不可以有目錄結構,而assets則可以有目錄結構,也就是assets目錄下可以再建立資料夾

*讀取檔案資源:

1.讀取res/raw下的檔案資源,通過以下方式獲取輸入流來進行寫操作

  • InputStream is = getResources().openRawResource(R.id.filename);  

2.(1)讀取assets下的檔案資源,通過以下方式獲取輸入流來進行寫操作

  • AssetManager am =null;  
  • am = getAssets();  
  • InputStream is = am.open("filename");  

  (2)如果用Videoview來播放:

  VideoView.setVideoUri(Uri.parse("android.resource://" + getpackageName() + "/" + R.raw.movie));