程序人生

Android 11 以上适配版本更新安装本地下载的apk文件

2021-12-03  本文已影响0人  AI研究猿

废话不多说 直接上代码 此处使用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卡加了权限的限制,此处使用的外部目录无需请求权限

上一篇 下一篇

猜你喜欢

热点阅读