Android 在代码中安装 APK 文件

少年乘勇气,百战过乌孙。这篇文章主要讲述Android 在代码中安装 APK 文件相关的知识,希望能为你提供帮助。
废话不说,上代码

private void install(String filePath) { Log.i(TAG, "开始执行安装: " + filePath); File apkFile = new File(filePath); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (Build.VERSION.SDK_INT > = Build.VERSION_CODES.N) { Log.w(TAG, "版本大于 N ,开始使用 fileProvider 进行安装"); intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); Uri contentUri = FileProvider.getUriForFile( mContext , "你的包名.fileprovider" , apkFile); intent.setDataAndType(contentUri, "application/vnd.android.package-archive"); } else { Log.w(TAG, "正常进行安装"); intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive"); } startActivity(intent); }

  代码说明关于在代码中安装 APK 文件,在 Android N 以后,为了安卓系统为了安全考虑,不能直接访问软件,需要使用 fileprovider 机制来访问、打开 APK 文件。
【Android 在代码中安装 APK 文件】上面的 if 语句,就是区分软件运行平台,来对 intent 设置不同的属性。
适配 Android 各个版本,使用代码安装 APK 第一步:
在清单文件(manifests.xml)application 标签中增加 < provider> 标签:
< application> < !--其他的配置项--> < provider android:name="android.support.v4.content.FileProvider" android:authorities="你的包名.fileprovider" android:exported="false" android:grantUriPermissions="true"> < meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> < /provider> < !--其他的配置项--> < /application>

注意两点内容:
1.  android:authorities="你的包名.fileprovider" 这个属性要设置成你自己的包名。
2. < meta-data> 标签下  android:resource="@xml/file_paths" 是要配置的 xml 文件,他的内容如下:
第二步:
在 res/xml 下增加文件:  file_paths.xml 该文件内容如下:
< ?xml version="1.0" encoding="utf-8"?> < paths> < external-path name="your_name" path="your_path" /> < /paths>

上面的两个属性要根据自己的使用来配置。
其中 < external-path> 就是手机的外置存储目录。
第三步:
在 java 代码中使用最上面的代码,问题解决。
这里面有个要注意的点:
清单文件中的  android:authorities="你的包名.fileprovider" 和 
Uri contentUri = FileProvider.getUriForFile( mContext , "你的包名.fileprovider" , apkFile);

中绿色背景的字段必须一致,否则会报错。

    推荐阅读