assets与res/raw不同

assets目录是Android的一种特殊目录,用于放置APP所需的固定文件,且该文件被打包到APK中时,不会被编码到二进制文件。
Android还存在一种放置在res下的raw目录,该目录与assets目录不同。
注意点:
1、 assets目录不会被映射到R中,因此,资源无法通过R.id方式获取,必须要通过AssetManager进行操作与获取;res/raw目录下的资源会被映射到R中,可以通过getResource()方法获取资源。
2、 多级目录:assets下可以有多级目录,res/raw下不可以有多级目录。
3、 编码(都不会被编码):assets目录下资源不会被二进制编码;res/raw应该也不会被编码。

Android Studio 添加assets目录的2种方法

main目录上右击:
1、 直接在src/main下新建assets目录:

 
Paste_Image.png

由于在工程创建时,在工程文件里已经添加了对应的资源目录说明:

 
Paste_Image.png
 
Paste_Image.png

所以,天然的资源目录。

2、 通过向导添加:

 
Paste_Image.png
 
Paste_Image.png

完成。

添加res/raw目录:

res右击:

 
Paste_Image.png
 
Paste_Image.png
 
Paste_Image.png
 
Paste_Image.png

添加完成。

assets内资源使用方法

1、 资源使用

AssetManager am = getAssets();
InputStream is = am.open("filename");

获取到输入流。

2、 信息获取
通过am.list(“”)得到assets目录下的所有文件和子目录名称的数组,通过am.list(SubFolderName),得到assets/SubFolderName下所有的文件和子目录名称的数组。
通过am.openFd(fileName)得到的AssetFileDescriptor对象来获得fileName文件的信息,例如长度等。
AssetFileDescriptor 能够完成对文件的其他一些操作,可以关注该类。

AssetManager接口介绍:

final String[] list(String path)  //返回指定路径下的所有文件及目录名

final InputStream open(String fileName) //使用 ACCESS_STREAMING模式打开assets下的指定文件

final InputStream open(String fileName, int accessMode) //使用显示的访问模式打开assets下的指定文件

简单应用:
1、结合WebView加载assets目录下的网页:
//加载assets/win8_Demo/目录下的index.html网页
webView.loadUrl("file:///android_asset/helloworld.html");
说明:可加载assets目录下的网页,css,js,图片等文件也会的加载。

res/raw资源使用

InputStream is = getResources().openRawResource(R.id.fileNameID) ;
//R.id.fileNameID
为需要访问的文件对应的资源ID

获取到输入流,即可使用。

VideoView播放:
VideoView.setVideoUri(Uri.parse("android.resource://" + getpackageName() + "/" + R.raw.movie));

参考文档:
http://www.cnblogs.com/spring87/p/4386043.html
http://blog.sina.com.cn/s/blog_4c07065601012arn.html
http://www.cnblogs.com/lianghui66/p/3248636.html
http://blog.csdn.net/fengyuzhengfan/article/details/38360017

作者:heguorui
链接:https://www.jianshu.com/p/5974fcf88170
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

Android Studio增加assets目录、raw目录的更多相关文章

  1. Android Studio 添加Assets目录

    Android Studio 添加Assets目录: 法一: Since Android Studio uses the new Gradle-based build system, you shou ...

  2. 【Android Studio安装部署系列】十五、Android studio添加Assets目录

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio新建项目时是没有assets目录,需要自己手动创建. app右键——New——Folder——Asset ...

  3. 【Android Studio安装部署系列】目录

    概述 从刚开始使用Android Studio到现在,下面所有目录下的操作,当时习惯性的把每一个整理成一个文档(其实就是简单文字描述+截图):有些地方当时是一知半解,现在会稍微明白一些.正好赶上现在有 ...

  4. android工程下assets与raw文件夹

    在应用的开发中,当我们创建一个新的Android工程后,我们会发现工程中包含了一个目录assets,另外当我们察看一些示例工程的时候,有时会发现在该工程的资源目录下会有一个raw目录(res/raw) ...

  5. Android Studio 没有assets目录的问题

    Where to place the assets folder in Android Studio   If you are having problems with asset files not ...

  6. Android Studio教程01-的工程和目录结构解析

    目录 1.主目录 1.1. app目录 1.2.项目资源文件夹res 2. 理解build.gradle文件 2.1. 外部build.gradle 2.2. app文件下的build.gradle ...

  7. Android studio 添加assets文件夹

    我们知道Eclipse创建的工程默认是有个assets文件夹的,但是Android studio默认没有帮我们创建,那么我们就自己创建一个就好啦. (1)手动创建 在项目的顶部有个下拉,默认选择的是A ...

  8. Android Studio增加NDK代码编译支持--Mac环境

    Android的APP开发基本都是使用Java或者跨平台框架进行开发的,对于很多APP来说已经足够了,但是,对于提供功能给外部使用或者性能要求很高的需求下,如图像处理等,可能会需要C/C++库的支持, ...

  9. Android Studio 增加函数注释模板

    此篇文章主要介绍如何在Android Studio中函数如何添加注释,使其和eclipse一样方便的添加注释 Android Studio默认函数注释为 /** * */ 下面方法将要改为如下格式 / ...

随机推荐

  1. js 自适应容器宽高

    var echartsWarp= document.getElementById('echartsWarp'); var resizeWorldMapContainer = function () { ...

  2. 模块化开发(requireJS)

    模块化 在前端使用模块化开发,可以将代码根据功能实施模块的划分,每个模块功能(职责)单一,在需要更改对应的功能的时候,只需要对指定的模块进行修改,其他模块不受任何影响. 为什么要进行前端模块化? 达到 ...

  3. VS2010-MFC(常用控件:组合框控件Combo Box)

    转自:http://www.jizhuomi.com/software/189.html 上一节讲了列表框控件ListBox的使用,本节主要讲解组合框控件Combo Box.组合框同样相当常见,例如, ...

  4. hdu-4893

    http://acm.hdu.edu.cn/showproblem.php?pid=1394 题意: 给定一个数组a,一开始数组里面的元素都是0,现在有三个操作: 操作1:给第k个数字加上d. 操作2 ...

  5. QT之QStatusBar

    1.QStatusBar一般处于主窗体(QMainWindow)的左下角用于显示比较重要的状态信息.我们通常调用其showMessage()函数 QT官方显示:[slot] void QStatusB ...

  6. tomcat部署war和war exploded区别和intellij idea部署项目的位置

    tomcat部署war和war exploded区别和intellij idea部署项目的位置 来自https://blog.csdn.net/u013041642/article/details/7 ...

  7. SGLTE/SVLTE、CSFB、SRVCC概念

    SGLTE:Simultaneous GSM and LTE,手机可以同时驻留在GSM和LTE网络中,打电话通过GSM网络进行,数据业务通过LTE网络进行.​ SVLTE:Simultaneous V ...

  8. 3.在vm上安装centos 7

    在vm上安装centos 7 1.文件 → 新建虚拟机 3.选择安装Linux系统 4. 虚拟机命名,并选择安装的文件夹 5.选择分配的处理器 6.使用网络地址转换 7.默写选项 9.新建虚拟机 10 ...

  9. StringUtils工具

    ppublic class StringUtils { private StringUtils() { } /** * 文本左边补零 * * @param maxLength 文本长度 * @para ...

  10. thinkone无法重新创建数据库的问题 newsy

    错误描述: 无法加载数据库驱动: Think\Db\Driver\    前后装了OneThink1.0和OneThink1.1都没成功,都是卡在了安装页面的三个step,读者们你们也遇到一样的情况吗 ...