美文网首页
Kotlin 7.0以上安装Apk

Kotlin 7.0以上安装Apk

作者: BreakerMan | 来源:发表于2018-07-17 14:59 被阅读0次

在网上找了很多适配7.0以上android系统打开文件的解决方法,但都是用java写的,在kotlin中又会碰到其它的问题,而显示kotlin问题方面的信息,根本就没有,在这里记录以下我使用kotlin打开文件是碰到的问题。

在项目中需要更新Apk,在我更新完Apk后,调用java写的工程中的安装方法转换成kotlin代码后,在kotlin项目中,运行安装,一直都是都是屏幕一闪之后,就没反应了,因为刚开始用kotlin,使用不是很熟,查看LogCat模式有错,在这记录遇到的问题及解决方式。

先配置先java的安装Apk的方式,有两种:

1,在你需要的地方,你可以使用如下代码,如果你需要在多个地方打开文件,你可以在Application中配置这个:

//7.0上安装apk报fileUriExposedException

//解决7.0以上传递file://类型uri抛出FileUriExposedException异常

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

val builder = StrictMode.VmPolicy.Builder()

StrictMode.setVmPolicy(builder.build())

}

在打开文件可以直接调用最基础的方法,不用适配7.0的问题:

File file =new File(fullPath);

Intent updateApk =new Intent(Intent.ACTION_VIEW);

Uri downloadFileUri = Uri.fromFile(file);

updateApk.setDataAndType(downloadFileUri, "application/vnd.android.package-archive");

updateApk.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

MyApplication.getInstance().startActivity(updateApk);

2.就是不使用上面配置的方法,使用FileProvider:

首先在项目的res目录下,创建一个xml文件夹,在里面创建一个file_paths.xml文件,里面内容:

file_paths.png  file_paths的内容

再在清单文件中配置FileProvider:

File_Provider.png  provider的配置

在打开文件的时候,需要适配7.0:

//判断是否是AndroidN以及更高的版本

Intent intent =new Intent(Intent.ACTION_VIEW);

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

      intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

      Uri contentUri = FileProvider.getUriForFile(context.getApplicationContext(),        BuildConfig.APPLICATION_ID +".fileProvider", file);

      intent.setDataAndType(contentUri, "application/vnd.android.package-archive");

 }else {

      intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");

      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

  }

  context.startActivity(intent);

在使用java编写工程的时候,打开文件没什么问题,但是在kotlin中,第一种方式没用,第二种方式Apk也安装不了,需要在清单文件中配置权限:

permission.png  权限配置图

相关文章

网友评论

      本文标题:Kotlin 7.0以上安装Apk

      本文链接:https://www.haomeiwen.com/subject/euswpftx.html