https://www.jianshu.com/p/c5d41272c7e9 Assets資源assets/和res/raw目錄相同之處兩者目錄下的文件在打包后會原封不動的保存在apk包中,不會被編譯成二進制,這些文件將被打包到APK中應用使用。 不同之處因為系統(tǒng)在編譯的時候不會編譯assets下的資源文件,所以我們不能通過R.XXX.ID的方式訪問它們。而且不能通過該資源的絕對路徑去訪問它們。因為apk安裝之后會放在/data/app/**.apk目錄下,以apk形式存在,asset/res和被綁定在apk里,并不會解壓到/data/data/YourApp目錄下去,所以我們無法直接獲取到assets的絕對路徑,因為它們根本就沒有。
res/raw目錄訪問res/raw目錄下文件的原始數(shù)據(jù)InputStream is = getResources().openRawResource(R.id.filename); assets/目錄創(chuàng)建assets/目錄AssetManagerAssetManager提供對應用程序的原始資源文件進行訪問;這個類提供了一個低級別的API,它允許你以簡單的字節(jié)流的形式打開和讀取和應用程序綁定在一起的原始資源文件。 獲取AssetManager示例可以通過Context.getAssets() 來獲取AssetManager示例。 AssetManager常用方法public Method | 描述 |
---|
String[] list(String path) | 返回指定路徑下的所有文件及目錄名。 | InputStream open(String fileName) | 使用 ACCESS_STREAMING模式打開assets下的指定文件。 | InputStream open(String fileName, int accessMode) | 使用指定的訪問模式打開assets下的指定文件. |
當調(diào)用open()來創(chuàng)建一個InputStream流時,fileName參數(shù)必須是文件,不能是文件夾。open方法是以assets目錄為根的。
實踐 加載assets/目錄下的html文件:webView.loadUrl("file:///android_asset/win8_Demo/index.html"); .Android SDK制定了URI:file:///android_asset/ + 文件路徑來表示assets/目錄下文件的絕對路徑。這種方式可以加載assets目錄下的網(wǎng)頁,并且與網(wǎng)頁有關(guān)的css,js,圖片等文件也會的加載。 String fileNames[] =context.getAssets().list(""); 來獲取assets/跟目錄下的所有文件和文件夾。這里發(fā)現(xiàn),安裝app之后assets/目錄下默認有三個文件夾:images,webkit,sounds。

assets dir.png 注意點調(diào)用close()時機當我們在項目中調(diào)用AssetManager.close()時,程序會終止并報錯:Assetmanager has been closed 這是因為,每一個APK文件在進程中都對應有一個全局的Resourses對象以及一個全局的AssetManager對象。其中,這個全局的Resourses對象保存在一個對應的ContextImpl對象的成員變量mResources中,而這個全局的AssetManager對象保存在這個全局的Resourses對象的成員變量mAssets中。 問題URI怎么轉(zhuǎn)換成文件路徑 res/raw/目錄下的資源怎么通過URI來訪問
參考Android開發(fā)之a(chǎn)ssets目錄下資源使用總結(jié) Android Studio 添加Assets目錄 java.lang.RuntimeException: Assetmanager has been closed 作者:獅_子歌歌 鏈接:https://www.jianshu.com/p/c5d41272c7e9 來源:簡書 著作權(quán)歸作者所有。非商業(yè)轉(zhuǎn)載請注明出處。
|