Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發之assets目錄下資源使用總結

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

編輯:關於Android編程

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

finalString[]list(Stringpath)

返回指定路徑下的所有文件及目錄名。

finalInputStreamopen(StringfileName)

使用ACCESS_STREAMING模式打開assets下的指定文件。.

finalInputStreamopen(StringfileName, int accessMode)

使用顯示的訪問模式打開assets下的指定文件.

1.加載assets目錄下的網頁:

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

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

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

 

加載assets目錄下的網頁

 

 

錨點
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目錄中復制整個文件夾內容

*@paramcontextContext使用CopyFiles類的Activity

*@paramoldPathString原文件路徑如:/aa

*@paramnewPathString復制後路徑如:xx:/bb/cc

*/

publicvoidcopyFilesFassets(Contextcontext,StringoldPath,StringnewPath){

try{

StringfileNames[]=context.getAssets().list(oldPath);//獲取assets目錄下的所有文件及目錄名

if(fileNames.length>0){//如果是目錄

Filefile=newFile(newPath);

file.mkdirs();//如果文件夾不存在,則遞歸

for(StringfileName:fileNames){

copyFilesFassets(context,oldPath+"/"+fileName,newPath+"/"+fileName);

}

}else{//如果是文件

InputStreamis=context.getAssets().open(oldPath);

FileOutputStreamfos=newFileOutputStream(newFile(newPath));

byte[]buffer=newbyte[1024];

intbyteCount=0;

while((byteCount=is.read(buffer))!=-1){//循環從輸入流讀取buffer字節

fos.write(buffer,0,byteCount);//將讀取的輸入流寫入到輸出流

}

fos.flush();//刷新緩沖區

is.close();

fos.close();

}

}catch(Exceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

//如果捕捉到錯誤則通知UI線程

MainActivity.handler.sendEmptyMessage(COPY_FALSE);

}

}

 

將assets下的文件復制到SD卡
將assets下的文件復制到SD卡

 

 

錨點
5.使用assets目錄下的圖片資源:

InputStreamis=getAssets().open("wpics/0ZR424L-0.jpg");

Bitmapbitmap=BitmapFactory.decodeStream(is);

imgShow.setImageBitmap(bitmap);

使用assets目錄下的圖片資源

 

 

錨點
6.播放assets目錄下的音樂

首先,獲取通過openFd()的方法獲取asset目錄下指定文件的AssetFileDescriptor對象。

其次,通過MediaPlayer對象的setDataSource(FileDescriptorfd,longoffset,longlength)方法加載音樂文件。

最後,調用prepare方法准備音樂,start方法開始播放音樂。

預備知識:

AssetFileDescriptor簡介:

在AssetManager中一項的文件描述符。這提供你自己打開的FileDescriptor可用於讀取的數據,以及在文件中的

偏移量和長度的該項的數據。

可以通過AssetManager的openFd()的方法獲取asset目錄下指定文件的AssetFileDescriptor對象。

常用方法:

Public Methods

FileInputStreamcreateInputStream()

為asset創建並返回一個自動關閉的輸入流。

FileOutputStreamcreateOutputStream()

為asset創建並返回一個自動關閉的輸出流。

FileDescriptorgetFileDescriptor()

返回可用於讀取文件中的數據的FileDescriptor對象。

longgetLength()

返回該asset中項的數據的總字節數。

longgetStartOffset()

返回asset中項的數據字節開始偏移。

具體代碼:

//打開指定音樂文件,獲取assets目錄下指定文件的AssetFileDescriptor對象

AssetFileDescriptorafd=am.openFd(music);

mPlayer.reset();

//使用MediaPlayer加載指定的聲音文件。

mPlayer.setDataSource(afd.getFileDescriptor(),

afd.getStartOffset(),afd.getLength());

//准備聲音

mPlayer.prepare();

//播放

mPlayer.start();

 
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved