预前知识:

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卡:

[java] view plaincopyprint?
  1. /**
  2. *  从assets目录中复制整个文件夹内容
  3. *  @param  context  Context 使用CopyFiles类的Activity
  4. *  @param  oldPath  String  原文件路径  如:/aa
  5. *  @param  newPath  String  复制后路径  如:xx:/bb/cc
  6. */
  7. public void copyFilesFassets(Context context,String oldPath,String newPath) {
  8. try {
  9. String fileNames[] = context.getAssets().list(oldPath);//获取assets目录下的所有文件及目录名
  10. if (fileNames.length > 0) {//如果是目录
  11. File file = new File(newPath);
  12. file.mkdirs();//如果文件夹不存在,则递归
  13. for (String fileName : fileNames) {
  14. copyFilesFassets(context,oldPath + "/" + fileName,newPath+"/"+fileName);
  15. }
  16. } else {//如果是文件
  17. InputStream is = context.getAssets().open(oldPath);
  18. FileOutputStream fos = new FileOutputStream(new File(newPath));
  19. byte[] buffer = new byte[1024];
  20. int byteCount=0;
  21. while((byteCount=is.read(buffer))!=-1) {//循环从输入流读取 buffer字节
  22. fos.write(buffer, 0, byteCount);//将读取的输入流写入到输出流
  23. }
  24. fos.flush();//刷新缓冲区
  25. is.close();
  26. fos.close();
  27. }
  28. } catch (Exception e) {
  29. // TODO Auto-generated catch block
  30. e.printStackTrace();
  31. //如果捕捉到错误则通知UI线程
  32. MainActivity.handler.sendEmptyMessage(COPY_FALSE);
  33. }
  34. }

5.使用assets目录下的图片资源:

[java] view plaincopyprint?
  1. InputStream is=getAssets().open("wpics/0ZR424L-0.jpg");
  2. Bitmap bitmap=BitmapFactory.decodeStream(is);
  3. imgShow.setImageBitmap(bitmap);

6.播放assets目录下的音乐

首先,获取通过openFd()的方法获取asset目录下指定文件的AssetFileDescriptor对象。

其次,通过MediaPlayer对象的setDataSource (FileDescriptorfd, longoffset, long length)方法加载音乐文件。

最后,调用prepare方法准备音乐,start方法开始播放音乐。

预备知识:

AssetFileDescriptor简介:

在AssetManager中一项的文件描述符。这提供你自己打开的FileDescriptor可用于读取的数据,以及在文件中的

偏移量和长度的该项的数据。

可以通过AssetManager的openFd()的方法获取asset目录下指定文件的AssetFileDescriptor对象。

常用方法:

Public Methods

FileInputStream

createInputStream()

为asset创建并返回一个自动关闭的输入流。

FileOutputStream

createOutputStream()

为asset创建并返回一个自动关闭的输出流。

FileDescriptor

getFileDescriptor()

返回可用于读取文件中的数据的FileDescriptor对象。

long

getLength()

返回该asset中项的数据的总字节数。

long

getStartOffset()

返回asset中项的数据字节开始偏移。

具体代码:

[java] view plaincopyprint?
  1. // 打开指定音乐文件,获取assets目录下指定文件的AssetFileDescriptor对象
  2. AssetFileDescriptor afd = am.openFd(music);
  3. mPlayer.reset();
  4. // 使用MediaPlayer加载指定的声音文件。
  5. mPlayer.setDataSource(afd.getFileDescriptor(),
  6. afd.getStartOffset(), afd.getLength());
  7. // 准备声音
  8. mPlayer.prepare();
  9. // 播放
  10. mPlayer.start();

Android开发之assets目录下资源使用总结相关推荐

  1. android studio输入框下划线,Android开发之TextView的下划线添加

    Android开发之TextView高级应用 Android开发之TextView高级应用 我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此.以下就和大 ...

  2. Android 开发之Windows环境下Android Studio安装和使用教程(图文详细步骤)

    鉴于谷歌最新推出的Android Studio备受开发者的推崇,所以也跟着体验一下. 一.介绍Android Studio  Android Studio 是一个Android开发环境,基于Intel ...

  3. android assets目录下资源,Android之assets资源目录的各种操作

    既然是要对assets资源目录操作.首先来解释下assets是啥? Android 中资源分为两种, ①.第一种是res下可编译的资源文件,这种资源文件系统会在R.java里面自动生成该资源文件的ID ...

  4. Android:读取assets目录下文件(二)

    在上篇博客里,介绍了如何读取assets目录下的txt文件.在这里,介绍如何读取xml文件. xml文件内容如下: <?xml version="1.0" encoding= ...

  5. nuxt引用static或者assets目录下资源注意事项

    Nuxt 服务器启动后,会将static文件目录映射到根路径/下. 所以想引用static目录下图片,直接写法如下 <img src="/log.png"/> 引用as ...

  6. Android开发之SDK开发获取资源id报错的问题

    我们在开发SDK的时候有时候需要兼容Eclipse版本和AS版本,AS版本就不说了没多大问题,主要是Eclipse版本会有问题.当开发之使用Eclipse开发的时候接入jar包(AS打包成aar,解压 ...

  7. Android Studio增加assets目录、raw目录

    assets与res/raw不同 assets目录是Android的一种特殊目录,用于放置APP所需的固定文件,且该文件被打包到APK中时,不会被编码到二进制文件. Android还存在一种放置在re ...

  8. Android开发之旅:HelloWorld项目的目录结构

    引言 前面Android开发之旅:环境搭建及HelloWorld,我们介绍了如何搭建Android开发环境及简单地建立一个HelloWorld项目,本篇将通过HelloWorld项目来介绍Androi ...

  9. Android复制assets目录下的图片到内存

    转自:http://www.chenwg.com/android/android%E5%A4%8D%E5%88%B6assets%E7%9B%AE%E5%BD%95%E4%B8%8B%E7%9A%84 ...

最新文章

  1. Android app 别用中文名
  2. 关于TypeError: ‘function‘ object is not subscriptable 报错的解决方法
  3. mysql avg 时间_MySQL或Rails在特定日期范围内每天获得AVG的最佳方式
  4. 解惑解释性语言与编译性语言
  5. 解决Eclipse、Android Studio ADT AVD不能检测到手机
  6. java.util.concurrent包
  7. Doc2Bow简介与实践Demo
  8. php-open网站还可以用,nginx+php使用open_basedir限制站点目录防止跨站
  9. java类加载体系,Java类加载体系
  10. 电气计算机基础知识,电气基础知识
  11. CMOS摄像头驱动分析笔记1
  12. win2008 server 多IP配置
  13. 在html中加入滚动条,html滚动条 textarea属性设置
  14. python领域驱动_DDD领域驱动设计学习初探
  15. 《Multiplayer Game Programming》阅读笔记
  16. 世界传说 换装迷宫2 所有人物及所有技能及奖励技能 传说系列各秘奥技和台词
  17. 以太坊地址和公钥_《每日一课》第九课:什么是钱包、钱包地址、私钥、公钥?...
  18. Bloodsucker ZOJ-3551 期望DP
  19. sublime3编程c语言,Sublime Text 3 实现C语言代码的编译和运行(示例讲解)
  20. oracle使用小技巧,Oracle在linux下使用小技巧

热门文章

  1. LeetCode-38 报数
  2. Chrome 控制台console的用法
  3. Vue2.x通用编辑组件的封装及应用
  4. 设计模式(C++实现)--一句话总结
  5. 使用PHPCS+GIT钩子保障团队开发中代码风格一致性实践
  6. Centos7 安装mongodb记录
  7. kafka0.8消费者实例
  8. Android 安全提示 笔记
  9. 将在本地创建的Git仓库push到Git@OSC
  10. WindowsServer2012史记5-简洁,管理更多的服务器