废话不多说 直接上代码 此处使用kotlin的扩展函数:
用到的依赖库:
//基础工具库 implementation 'com.github.tamsiree.RxTool:RxKit:2.6.3'
/**
* 通过系统应用打开文件
*/
fun Context.openFile(file: File) {
if (FileUtil.isPDFFileType(file.path)) {
PDFViewActivity.APIs.actionStart(this, file)
} else {
try {
val intent2 = Intent("android.intent.action.VIEW")
intent2.addCategory("android.intent.category.DEFAULT")
intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
val uri = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent2.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION;
// FileProvider.getUriForFile(this, this.packageName + ".FileProvider", file)
RxFileTool.getUriForFile(this, file)
} else {
Uri.fromFile(file)
}
intent2.setDataAndType(uri, FileMimeType.getMimeType(file.path))
startActivity(intent2)
} catch (e: Exception) {
//没有安装第三方的软件会提示
showToast("没有找到打开该文件的应用程序")
}
}
}
调用处如下:
// 下载存储的文件名
var DOWNLOAD_NAME = "tanka.apk"
@JvmField
val BASE_FILE_INSTALL_APK_DIR = "${RxTool.getContext().externalCacheDir}/apk" //apk安装目录,可删除
//安装应用
context.openFile(
File(
Constants.BASE_FILE_INSTALL_APK_DIR, DOWNLOAD_NAME
)
)
备注:externalCacheDir为外部目录 Android11对读取SD卡加了权限的限制,此处使用的外部目录无需请求权限
网友评论