Android应用资源全面分析之五:原生资源

        原生资源是指除了图片(png/jpg/gif/bmp)和xml文档(包括自定义的和Android规定格式的)以外的服务于Android程序的各种原始格式的文件,包括音频、视频、字体、数据库、文本等等各种文件。它们不需要额外的定义,只需把原始文件放在特定的文件夹下(assets或res/raw)即可读取和使用,但不能修改。这两个文件夹下的文件会原封不动地保存在apk包中,不会被编译成二进制。它们的区别是:

  • assets下可以有子文件夹,res/raw不可以。
  • res/raw下的资源可以用R.raw.filename方式来访问 assets文件夹下的资源只能用“path+filename”来访问,具体访问方法如下:

一、原生资源访问

名称

assets

res/raw

访问准备

AssetManager assetManager = getResources().getAssets();

AssetManager assetManager = getAssets();

AssetManager assetManager=AssetManager.class.newInstance();

 

String rawfile=path+filename

R.raw.filename

文本文件(.txt)

 InputStream is = assetManager.open(rawfile);

 assetManager.close()

InputStream is = getResources().openRawResource(R.raw.file)

音频文件(.mp3)

AssetFileDescriptor afd = assetManager.openFd(rawfile);

MediaPlayer mPlayer =new MediaPlayer();

mPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength());

mPlayer.prepare();

mPlayer.start();

MediaPlayer mPlayer = MediaPlayer.create(context, R.raw.filename)

mPlayer.prepare();

mPlayer.start();

视频文件(.mp4)

AssetFileDescriptor afd = assetManager.openFd(rawfile);

MediaPlayer mPlayer =new MediaPlayer();

mPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength());

SurfaceHolder holder=surfaceView.getHolder()

holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);  

holder.addCallback(this)

 @Override    

 public void surfaceCreated(SurfaceHolder holder) {    

player.setDisplay(holder); 

player.prepareAsync();}

@Override    

 public void onPrepared(MediaPlayer player) {  

           player.start();}

String uriString = "android.resource://" + getPackageName() + "/" + R.raw.filename;

Uri uri = Uri.parse(uriString);

videoView.setVideoURI(uri);//为视频播放器设置视频路径

videoView.setMediaController(new MediaController(RawActivity.this));//显示控制栏

videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

    @Override

    public void onPrepared(MediaPlayer mp) {

        videoView.start();//开始播放视频

    }

});

网页文件(.html)

 webView.loadUrl("file:///android_asset/rawfile");

webView.loadUrl("file:///android_res/raw/file");

sqlite数据库(.db)

 使用文本文件方法将其copy到/data/data/packageName下再访问

使用文本文件方法将其copy到/data/data/packageName下再访问

字体文件(.ttf)

Typeface tf = Typeface.createFromAsset(assetManager, "fonts/rawfile");

textview.setTypeface(tf);

字体文件通常直接放在res/font文件夹下:

Typeface tf = getResources().getFont(R.font.myfont);     

textview.setTypeface(tf);

二、示例

Android应用资源全面分析之五:原生资源

三、Demo源码

      Resource Demo是将所有Android资源集合在一起,对其定义、引用和应用进行充分完全的演示,包括上述演示的全部内容。此Demo提供了详细的注释和说明,不仅可供学习时使用,也可作为模版在开发中直接使用(拷贝需要的代码段即可),以加快开发进度。该Demo在Android Studio 3.0 和Android SDK5.0以上版本可直接运行,欢迎索取使用。有需要者请发邮件到:[email protected] 即可。

Android应用资源全面分析之五:原生资源

建议直接下载安装APK:Android ResourceDemo,演示效果会更好。该APK可在Android5.0以上版本正常运行。