Android开发之assets目录下资源使用总结
预前知识:
Android资源文件分类:
第一种是res目录下存放的可编译的资源文件:
这种资源文件系统会在R.Java里面自动生成该资源文件的ID,所以访问这种资源文件比较简单,通过R.XXX.ID即可;
第二种是assets目录下存放的原生资源文件:
还好android系统为我们提供了一个AssetManager工具类。
查看官方API可知,AssetManager提供对应用程序的原始资源文件进行访问;这个类提供了一个低级别的API,它允许你以简单的字节流的形式打开和读取和应用程序绑定在一起的原始资源文件。
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);
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中项的数据字节开始偏移。 |
具体代码:
- // 打开指定音乐文件,获取assets目录下指定文件的AssetFileDescriptor对象
- AssetFileDescriptor afd = am.openFd(music);
- mPlayer.reset();
- // 使用MediaPlayer加载指定的声音文件。
- mPlayer.setDataSource(afd.getFileDescriptor(),
- afd.getStartOffset(), afd.getLength());
- // 准备声音
- mPlayer.prepare();
- // 播放
- mPlayer.start();
Android开发之assets目录下资源使用总结相关推荐
- android studio输入框下划线,Android开发之TextView的下划线添加
Android开发之TextView高级应用 Android开发之TextView高级应用 我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此.以下就和大 ...
- Android 开发之Windows环境下Android Studio安装和使用教程(图文详细步骤)
鉴于谷歌最新推出的Android Studio备受开发者的推崇,所以也跟着体验一下. 一.介绍Android Studio Android Studio 是一个Android开发环境,基于Intel ...
- android assets目录下资源,Android之assets资源目录的各种操作
既然是要对assets资源目录操作.首先来解释下assets是啥? Android 中资源分为两种, ①.第一种是res下可编译的资源文件,这种资源文件系统会在R.java里面自动生成该资源文件的ID ...
- Android:读取assets目录下文件(二)
在上篇博客里,介绍了如何读取assets目录下的txt文件.在这里,介绍如何读取xml文件. xml文件内容如下: <?xml version="1.0" encoding= ...
- nuxt引用static或者assets目录下资源注意事项
Nuxt 服务器启动后,会将static文件目录映射到根路径/下. 所以想引用static目录下图片,直接写法如下 <img src="/log.png"/> 引用as ...
- Android开发之SDK开发获取资源id报错的问题
我们在开发SDK的时候有时候需要兼容Eclipse版本和AS版本,AS版本就不说了没多大问题,主要是Eclipse版本会有问题.当开发之使用Eclipse开发的时候接入jar包(AS打包成aar,解压 ...
- Android Studio增加assets目录、raw目录
assets与res/raw不同 assets目录是Android的一种特殊目录,用于放置APP所需的固定文件,且该文件被打包到APK中时,不会被编码到二进制文件. Android还存在一种放置在re ...
- Android开发之旅:HelloWorld项目的目录结构
引言 前面Android开发之旅:环境搭建及HelloWorld,我们介绍了如何搭建Android开发环境及简单地建立一个HelloWorld项目,本篇将通过HelloWorld项目来介绍Androi ...
- 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 ...
最新文章
- Android app 别用中文名
- 关于TypeError: ‘function‘ object is not subscriptable 报错的解决方法
- mysql avg 时间_MySQL或Rails在特定日期范围内每天获得AVG的最佳方式
- 解惑解释性语言与编译性语言
- 解决Eclipse、Android Studio ADT AVD不能检测到手机
- java.util.concurrent包
- Doc2Bow简介与实践Demo
- php-open网站还可以用,nginx+php使用open_basedir限制站点目录防止跨站
- java类加载体系,Java类加载体系
- 电气计算机基础知识,电气基础知识
- CMOS摄像头驱动分析笔记1
- win2008 server 多IP配置
- 在html中加入滚动条,html滚动条 textarea属性设置
- python领域驱动_DDD领域驱动设计学习初探
- 《Multiplayer Game Programming》阅读笔记
- 世界传说 换装迷宫2 所有人物及所有技能及奖励技能 传说系列各秘奥技和台词
- 以太坊地址和公钥_《每日一课》第九课:什么是钱包、钱包地址、私钥、公钥?...
- Bloodsucker ZOJ-3551 期望DP
- sublime3编程c语言,Sublime Text 3 实现C语言代码的编译和运行(示例讲解)
- oracle使用小技巧,Oracle在linux下使用小技巧