Android studio assets文件夹

前言

上一篇: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中。