日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Android Resources之a(chǎn)ssets

 rongq2007 2021-09-26

https://www.jianshu.com/p/c5d41272c7e9

Assets資源

assets/和res/raw目錄

相同之處

兩者目錄下的文件在打包后會原封不動的保存在apk包中,不會被編譯成二進制,這些文件將被打包到APK中應用使用。

不同之處

  • res/raw中的文件會被映射到R.java文件中,訪問的時候直接使用資源ID即R.id.filename;assets文件夾下的文件不會被映射到R.java中,訪問的時候需要AssetManager類。

  • res/raw不可以有目錄結(jié)構(gòu),而assets則可以有目錄結(jié)構(gòu),也就是assets目錄下可以再建立文件夾

因為系統(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/目錄

  • 直接在src/main/路徑下創(chuàng)建assets文件夾

  • Project選中project模式,選中app文件夾,工具欄選擇File > New > Folder > Assets Folder

AssetManager

AssetManager提供對應用程序的原始資源文件進行訪問;這個類提供了一個低級別的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目錄為根的。

實踐

  1. 加載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,圖片等文件也會的加載。

  2. 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)載請注明出處。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多