日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android开发之assets目录下资源使用总结

發(fā)布時間:2023/12/20 Android 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android开发之assets目录下资源使用总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

預前知識:

Android資源文件分類:


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

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

? ? 這種資源文件系統(tǒng)會在R.Java里面自動生成該資源文件的ID,所以訪問這種資源文件比較簡單,通過R.XXX.ID即可;

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

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

還好android系統(tǒng)為我們提供了一個AssetManager工具類。

? ? ? 查看官方API可知,AssetManager提供對應用程序的原始資源文件進行訪問;這個類提供了一個低級別的API,它允許你以簡單的字節(jié)流的形式打開和讀取和應用程序綁定在一起的原始資源文件。

AssetManager類


概述:

? ? ? ?提供對應用程序的原始資源文件進行訪問;這個類提供了一個低級別的API,它允許你以簡單的字節(jié)流的形式打開和讀取和應用程序綁定在一起的原始資源文件。通過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目錄下的網(wǎng)頁:

//加載assets/win8_Demo/目錄下的index.html網(wǎng)頁

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

說明:這種方式可以加載assets目錄下的網(wǎng)頁,并且與網(wǎng)頁有關的cssjs,圖片等文件也會的加載。


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

? ? ? ?AssetManager.open(String filename),返回的是一個InputSteam類型的字節(jié)流,這里的filename必須是文件比如

(aa.txt;img/semll.jpg),而不能是文件夾。

3.獲取assets的文件及目錄名:

//獲取assets目錄下的所有文件及目錄名,content(當前的上下文如ActivityServiceContextWrapper的子類的

都可以)

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

4.將assets下的文件復制到SD卡:

[java]?view plaincopy print?
  • /**??
  • ?*??從assets目錄中復制整個文件夾內(nèi)容??
  • ?*??@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)?{//循環(huán)從輸入流讀取?buffer字節(jié)??????????
  • ????????????????fos.write(buffer,?0,?byteCount);//將讀取的輸入流寫入到輸出流??
  • ????????????}??
  • ????????????fos.flush();//刷新緩沖區(qū)??
  • ????????????is.close();??
  • ????????????fos.close();??
  • ????????}??
  • ????}?catch?(Exception?e)?{??
  • ????????//?TODO?Auto-generated?catch?block??
  • ????????e.printStackTrace();??
  • ????????//如果捕捉到錯誤則通知UI線程??
  • ???????????????????MainActivity.handler.sendEmptyMessage(COPY_FALSE);??
  • ????}?????????????????????????????
  • }??
  • ??????????

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

    [java]?view plaincopy print?
  • InputStream?is=getAssets().open("wpics/0ZR424L-0.jpg");??
  • Bitmap?bitmap=BitmapFactory.decodeStream(is);??
  • imgShow.setImageBitmap(bitmap);??

  • 6.播放assets目錄下的音樂

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

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

    最后,調(diào)用prepare方法準備音樂,start方法開始播放音樂。

    預備知識:

    AssetFileDescriptor簡介:

    ??????? 在AssetManager中一項的文件描述符。這提供你自己打開的FileDescriptor可用于讀取的數(shù)據(jù),以及在文件中的

    偏移量和長度的該項的數(shù)據(jù)。

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

    ?常用方法:

    Public Methods

    FileInputStream

    createInputStream()

    為asset創(chuàng)建并返回一個自動關閉的輸入流。

    FileOutputStream

    createOutputStream()

    為asset創(chuàng)建并返回一個自動關閉的輸出流。

    FileDescriptor

    getFileDescriptor()

    返回可用于讀取文件中的數(shù)據(jù)的FileDescriptor對象。

    long

    getLength()

    返回該asset中項的數(shù)據(jù)的總字節(jié)數(shù)。

    long

    getStartOffset()

    返回asset中項的數(shù)據(jù)字節(jié)開始偏移。

    具體代碼:

    [java]?view plaincopy print?
  • //?打開指定音樂文件,獲取assets目錄下指定文件的AssetFileDescriptor對象??
  • AssetFileDescriptor?afd?=?am.openFd(music);??
  • mPlayer.reset();??
  • //?使用MediaPlayer加載指定的聲音文件。??
  • mPlayer.setDataSource(afd.getFileDescriptor(),??
  • ????afd.getStartOffset(),?afd.getLength());??
  • //?準備聲音??
  • mPlayer.prepare();??
  • //?播放??
  • mPlayer.start();??
  • 總結

    以上是生活随笔為你收集整理的Android开发之assets目录下资源使用总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。