我是靠谱客的博主 搞怪耳机,最近开发中收集的这篇文章主要介绍Kotlin转移assets至SD引言正文,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

引言


application已经创建好了,紧接着的工作就是初始化工程中所需要的资源例如:SDK的初始化、Manager的启动等。

正常情况下application启动初始化的工作不应该太繁重,否则会导致app启动时白屏的状况(当然可以通过设置背景蒙混过去),造成不好的用户体验(现在接到手头上的项目,启动需要3-5s,直接想砸,备注: 不是烂手机,Samsung Galaxy S7 edge),通常会将繁重的任务例如IO放到新开的线程中。但还是会有其他情况,例如关键业务的数据加载、启动页的视频加载等,不将其完成会直接影响使用,我所遇到情况是在启动页播放一个视频。

正文


启动页的背景是一个视频,这是一个非常吸引人的设计,尤其是首次打开,动态的效果会俘获用户。这就面临这一个问题:
如何播放assets内的视频文件?

视频文件mp4不像字体文件可以通过工厂方法Typeface.createFromAsset()直接获取。mp4文件打开会得到InputStream,就我所知没有一个Android播放控件可以播放文件流的,一般都是网络流,所以要将mp4转移到SD卡上。

保存到什么位置呢?有以下几个选项
1、getCacheDir()
2、getFilesDir()
3、getExternalCacheDir()
4、getExternalFilesDir()
5、getExternalStorageDirectory()

1、2、3、4跟随app的包名创建的目录,清除缓存或卸载会将数据清除

1、2、3、4不需要申请权限,

3、4、5需要判断是否存在外置SD

5、需要自己手动维护文件结构

有以下几点选择2作为视频文件的存储路径
- 不需要权限:文件保存需要在闪屏页之前操作,可能没有外置SD的权限
- 用户查看不到此路径:保证了视频的安全性
- 清除缓存文件会被删除:视频文件属于M级别,保证了用户空间大小

以下就是贴代码时间

    override fun onCreate() {
        super.onCreate()
        instance = this
        init()
    }

    fun init() {//即使此时只是转移文件,还是多抽一层出来,难免以后初始化其他的
        initAssets()
    }

    //将资源从包中转移到存储
    fun initAssets() {
        if (!isFileExist()) {
            translateFile()
        }
    }

    fun isFileExist(): Boolean {
        var file = File(CacheUtils.getFileDir() + "landing.mp4")
        return file.exists()
    }

    fun translateFile() {
        var inputStream = assets.open("landing.mp4")
        var outputStream = FileOutputStream(CacheUtils.getFileDir() + "landing.mp4")
        var byteArray = ByteArray(512)
        while (inputStream.read(byteArray) != -1) {
            outputStream.write(byteArray)
        }
        outputStream.flush()
        outputStream.close()
        inputStream.close()
    }

最后

以上就是搞怪耳机为你收集整理的Kotlin转移assets至SD引言正文的全部内容,希望文章能够帮你解决Kotlin转移assets至SD引言正文所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部