前言
上一篇:Android studio res资源文件夹 我们学习了res资源文件夹,这次我们来看看另外资源存放位置assets文件夹
目录
定义
特点
创建asset文件夹
具体用法
总结
定义
assets文件夹用于存放应用程序的资产文件
特点
该文件夹下的文件不会被系统编译,所以无法通过R.*.*这种方式来访问。Android专门为assets目录提供了一个工具类AssetManager,通过该工具,我们能够以字节流方式打开assets下的文件,并将字节流转换为文本或者图像
创建asset文件夹
创建asset文件夹——File->Folder->Assets Folder
具体用法
文本文件
具体使用:
InputStream inputStream = null; Reader reader = null; BufferedReader bufferedReader = null; try { inputStream = getAssets().open("b2.txt"); reader = new InputStreamReader(inputStream); bufferedReader = new BufferedReader(reader); } catch (IOException e) { e.printStackTrace(); } StringBuilder builder = new StringBuilder(); String line; while ((line = bufferedReader.readLine()) != null) { builder.append(line); builder.append("\n"); } bufferedReader.close(); mTextView.setText(builder.toString()); mTextView.setTextColor(Color.rgb(0,0,0));
图像文件
具体使用:
Bitmap bitmap = null; InputStream inputStream = null; Reader reader = null; BufferedReader bufferedReader = null; try { inputStream = getAssets().open("b1.png"); bitmap = BitmapFactory.decodeStream(inputStream); } catch (IOException e) { e.printStackTrace(); } mImageView.setImageBitmap(bitmap);
网页文件
具体使用:
mWebView.loadUrl("file:///android_asset/b3.html"); WebViewClient webViewClient = new WebViewClient(); mWebView.setWebViewClient(webViewClient);
音频文件
具体使用:
try { AssetFileDescriptor openFd = getAssets().openFd("b4.mp3"); mMediaPlayer = new MediaPlayer(); mMediaPlayer.setDataSource(openFd.getFileDescriptor(),openFd.getStartOffset(),openFd.getLength()); mMediaPlayer.setLooping(true); mMediaPlayer.prepare(); mMediaPlayer.start(); } catch (IOException e) { e.printStackTrace(); }
视频文件
具体使用:
SurfaceHolder holder = mSurfaceView.getHolder(); holder.addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(@NonNull SurfaceHolder holder) { // 在这里开始播放视频 try { AssetFileDescriptor openFd = getAssets().openFd("b5.mp4"); mMediaPlayer = new MediaPlayer(); mMediaPlayer.setDataSource(openFd.getFileDescriptor(),openFd.getStartOffset(),openFd.getLength()); mMediaPlayer.setDisplay(holder);// 将MediaPlayer与SurfaceHolder关联 mMediaPlayer.setLooping(true); } catch (IOException e) { e.printStackTrace(); } mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mMediaPlayer.start(); mp.setOnInfoListener(new MediaPlayer.OnInfoListener() { @Override public boolean onInfo(MediaPlayer mp, int what, int extra) { //这个状态表示展现了用于渲染的第一帧视频 if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START){ //将VideoView的背景色设置为透明。 mSurfaceView.setBackgroundColor(Color.TRANSPARENT); } return true;//表示这个信息事件已经被处理,不需要再传递给其他可能的监听器 } }); } }); mMediaPlayer.prepareAsync(); } @Override public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) { // 可以在这里调整视频大小或处理其他变化 } @Override public void surfaceDestroyed(@NonNull SurfaceHolder holder) { // 清理资源,停止播放等 } });
总结
在Android Studio中,assets文件夹是一个特殊的目录,用于存储应用程序需要的非资源文件。与res目录中的资源文件不同,assets文件夹中的文件不会被编译为二进制形式,而是直接以原始文件的形式打包到APK中。