Android 在线预览文件

1 篇文章 0 订阅
1 篇文章 0 订阅

导言:
公司项目中经常碰到在线预览文件的功能,比如doc,pdf等格式,今天在此只是总结一下几种不同的使用场景,根据自己的需求进行选择,这里举例pdf文件

场景
1,先下载本地,再用手机自带第三方app打开,下次预览直接预览本地已下载文件


//okhttp下载文件
 DownLoadManager.instance!!.load(
            fileUrl, 2,
            object : ProgressCallBack<ResponseBody>(destFileDir, destFileName) {
                override fun onSuccess(t: ResponseBody) {
                    val file: File? = FileUtils.getDirFile(destFileDir, destFileName)
                    val uriForFile = FileUtils.getUriForFile(getApplication(), file)
                        val canPre = checkPermissions(perssionId, "预览")
                        if (canPre) {
                            preFile(destFileName, file, uriForFile)
                        } else {
                            "您没有预览权限".toast()
                        }
                }

                override fun onError(e: Throwable?) {
                    progressEndEvent.call()
                    "文件下载失败!".toast()
                }

                override fun onCompleted() {
                    progressEndEvent.call()
                }
            })
            
//预览文件
fun openFile(uriForFile: Uri, destFileName: String) {
        val intent = Intent("android.intent.action.VIEW")
        intent.addCategory("android.intent.category.DEFAULT")
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            intent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
        }
        if (destFileName.endsWith("doc") || destFileName.endsWith("docx")) {
            intent.setDataAndType(uriForFile, "application/msword")
        } else if (destFileName.endsWith("xls") || destFileName.endsWith("xlsx")) {
            intent.setDataAndType(uriForFile, "application/vnd.ms-excel")
        } else if (destFileName.endsWith("pdf")) {
            intent.setDataAndType(uriForFile, "application/pdf")
        } else if (destFileName.endsWith("png") || destFileName.endsWith("jpg") || destFileName.endsWith(
                "jpeg"
            )
        ) {
            intent.setDataAndType(uriForFile, "image/*")
        } else if (destFileName.endsWith("ppt") || destFileName.endsWith("pptx")) {
            intent.setDataAndType(uriForFile, "application/vnd.ms-powerpoint")
        } else if (destFileName.endsWith("txt")) {
            intent.setDataAndType(uriForFile, "text/plain")
        } else if (destFileName.endsWith("mp3")) {
            intent.setDataAndType(uriForFile, "audio/*")
        }
        /*else if (destFileName.endsWith("zip")) {
            intent.setDataAndType(uriForFile,"application/x-gzip")
        } else if (destFileName.endsWith("dwg") || destFileName.endsWith("DWG")) {
            intent.setDataAndType(uriForFile,"application/x-autocad")
        }*/
        intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
        BaseApplication.context.startActivity(intent)
    }
    

2,先下载本地,使用腾讯TBS服务(暂不支持在线)在app内预览文件


//okhttp下载文件--同上
...........................................................略

//参照腾讯TBS官方文件即可
https://x5.tencent.com/docs/access.html

3,结合webview和PDF.js实现在线预览,其中PDF.js在app本地接入


//本地接入PDF.js,需要一个html文件和一个js文件,具体可参考
https://blog.csdn.net/taoyuxin1314/article/details/97004996
https://blog.csdn.net/sunnyjerry/article/details/84581819

//布局文件页面准备webview,该部分略
...........................................................略

4:结合webview和PDF.js实现在线预览,其中PDF.js在H5页面接入,app只提供webview


//H5接入PDF.js,我们无需关心
...........................................................略

//布局文件页面准备webview,该部分略
...........................................................略

好了,只是简单总结,若有好的想法和思路,评论区回复

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值