导言:
公司项目中经常碰到在线预览文件的功能,比如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,该部分略
...........................................................略
好了,只是简单总结,若有好的想法和思路,评论区回复