• 【Android】资源系列(二) -- 文件原样保留的资源assets和res/raw文件夹


    这两个文件夹都能够存放文件。而在打包的时候被原样保留。

    那用这两个文件夹可以做什么事呢?

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

    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,那获取就更加easy了,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就能够安装了。


  • 相关阅读:
    网络编程笔记--socket可读可写条件
    redis内核了解
    TIPI 阅读笔记 ----cgi 和 fastcgi
    csv 导 mysql
    Linux IO模式及 select、poll、epoll详解(转载)
    nginx 配置location php 不被解析解决办法
    汇编实验九
    汇编实验四
    实验三
    汇编 实验二
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6972389.html
Copyright © 2020-2023  润新知