当前位置: 代码迷 >> Android >> 【Android】资源系列(2) - 文件原样保留的资源assets和res/raw目录
  详细解决方案

【Android】资源系列(2) - 文件原样保留的资源assets和res/raw目录

热度:73   发布时间:2016-04-27 23:56:55.0
【Android】资源系列(二) -- 文件原样保留的资源assets和res/raw目录

这两个目录都可以存放文件,而在打包的时候被原样保留。

那用这两个目录能够做什么事呢?

1、放一个apk,要用的时候调出来,免得去下载服务器下载。

2、放一个sql,当app数据库很大的时候,这可以省事很多。

3、放一段视频、录音等,作为开机启动的介绍,是不是很炫。。。。。  


那问什么要弄两个目录呢。。。。

其实assets翻译为"资源",raw翻译为"原始的",并且在res目录下,res故名思议,它下面放的就是资源,还有很多呢。例如动画、图片、xml、ids、values 等等。。。

所以通俗的理解就是

1、assets是为apk的外部资源准备的,可以理解为外挂目录,它可以有文件结构。

2、raw属于apk的自有资源,并且会在R文件中生成它的ID。


明白了它们存在的理由,那也就知道访问它们的方式是不一样的。

assest :利用AssetManager来获取资源。getAssets()定义在Context中,用于获取AssetManager。至于AssetManager,它下面的list,open等方法就是读取文件的咯。

raw:它会在R中生成ID,那获取就更加容易了,getResources().openRawResource() 用于获取输入流。


这里聊下如何将apk放在raw中,并且在程序中安装。

1、拷贝需要放的apk放在raw目录下,改名为tmp.apk

2、在需要安装的地方调用安装方法。ps(用uri的"android.resource"怎么都不行,求高人指点。用apache-common-io包提供的简洁方法更迅速)

File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/app_tmp.apk");						try {							FileUtils.copyInputStreamToFile(getResources().openRawResource(R.raw.tmp), file);							} catch (NotFoundException e) {							} catch (IOException e) {							}							Util.install(AddDeviceActivity.this, Uri.fromFile(file));

/**	 * 安装一个app	 * @param context	 * @param filePath 需要安装的文件路径	 * @return	 */	public static void install(Context context, Uri uri) {		Intent i = new Intent(Intent.ACTION_VIEW);		i.setDataAndType(uri, "application/vnd.android.package-archive");//		i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);		context.startActivity(i);	}


3、原理是不是一看就懂啊,是的,将输入流输出到SD卡上并生成一个文件,将file传入uri就可以安装了。


版权声明:本文为博主原创文章,未经博主允许不得转载。

  相关解决方案