前言
上一篇:Android studio res资源文件夹 我们学习了res资源文件夹,这次我们来看看另外资源存放位置assets文件夹
目录
定义
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中。