Android開發之assets目錄下資源使用總結

來源:互聯網
上載者:User

標籤:assets目錄下資源使用總結   assetmanager類簡介   載入assets目錄下的網頁   將assets下的檔案複製到sd卡   訪問assets目錄下的資源檔   

預前知識:

Android資源檔分類:

Android資源檔大致可以分為兩種:

第一種是res目錄下存放的可編譯的資源檔:

    這種資源檔系統會在R.java裡面自動產生該資源檔的ID,所以訪問這種資源檔比較簡單,通過R.XXX.ID即可;

 第二種是assets目錄下存放的原生資源檔:

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

還好Android系統為我們提供了一個AssetManager工具類。

      查看官方API可知,AssetManager提供對應用程式的原始資源檔進行訪問;這個類提供了一個低層級的API,它允許你以簡單的位元組流的形式開啟和讀取和應用程式綁定在一起的原始資源檔。

AssetManager類概述:

       提供對應用程式的原始資源檔進行訪問;這個類提供了一個低層級的API,它允許你以簡單的位元組流的形式開啟和讀取和應用程式綁定在一起的原始資源檔。通過getAssets()方法擷取AssetManager對象。

AssetManager類常用方法:

Public Methods

final String[]

list(String path)

返回指定路徑下的所有檔案及目錄名。

final InputStream

open(String fileName)

使用 ACCESS_STREAMING模式開啟assets下的指定檔案。.

final InputStream

open(String fileName, int accessMode)

使用顯示的訪問模式開啟assets下的指定檔案.


應用執行個體1.載入assets目錄下的網頁:

//載入assets/win8_Demo/目錄下的index.html網頁

webView.loadUrl("file:///android_asset/win8_Demo/index.html");

說明:這種方式可以載入assets目錄下的網頁,並且與網頁有關的css,js,圖片等檔案也會的載入。


2.訪問assets目錄下的資源檔:

       AssetManager.open(String filename),返回的是一個InputSteam類型的位元組流,這裡的filename必須是檔案比如(aa.txt;img/semll.jpg),而不能是檔案夾。

3.擷取assets的檔案及目錄名:

//擷取assets目錄下的所有檔案及目錄名,content(當前的上下文如Activity,Service等ContextWrapper的子類的都可以)

String fileNames[] =context.getAssets().list(path);    

4.將assets下的檔案複製到SD卡:
/**  *  從assets目錄中複製整個檔案夾內容  *  @param  context  Context 使用CopyFiles類的Activity *  @param  oldPath  String  原檔案路徑  如:/aa  *  @param  newPath  String  複製後路徑  如:xx:/bb/cc  */ public void copyFilesFassets(Context context,String oldPath,String newPath) {                             try {        String fileNames[] = context.getAssets().list(oldPath);//擷取assets目錄下的所有檔案及目錄名        if (fileNames.length > 0) {//如果是目錄            File file = new File(newPath);            file.mkdirs();//如果檔案夾不存在,則遞迴            for (String fileName : fileNames) {               copyFilesFassets(context,oldPath + "/" + fileName,newPath+"/"+fileName);            }        } else {//如果是檔案            InputStream is = context.getAssets().open(oldPath);            FileOutputStream fos = new FileOutputStream(new File(newPath));            byte[] buffer = new byte[1024];            int byteCount=0;                           while((byteCount=is.read(buffer))!=-1) {//迴圈從輸入資料流讀取 buffer位元組                        fos.write(buffer, 0, byteCount);//將讀取的輸入資料流寫入到輸出資料流            }            fos.flush();//重新整理緩衝區            is.close();            fos.close();        }    } catch (Exception e) {        // TODO Auto-generated catch block        e.printStackTrace();        //如果捕捉到錯誤則通知UI線程                   MainActivity.handler.sendEmptyMessage(COPY_FALSE);    }                           }        

5.使用assets目錄下的圖片資源:
InputStream is=getAssets().open("wpics/0ZR424L-0.jpg");Bitmap bitmap=BitmapFactory.decodeStream(is);imgShow.setImageBitmap(bitmap);


 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.