/**
* 安装apk
*
* @param context
* @param apkPath
*/
public static void installApk(Context context, String apkPath) {
try {
/**
* provider
* 处理android 7.0 及以上系统安装异常问题
*/
File file = new File(apkPath);
Intent install = new Intent();
install.setAction(Intent.ACTION_VIEW);
install.addCategory(Intent.CATEGORY_DEFAULT);
install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Uri apkUri = FileProvider.getUriForFile(context, "com.chao.app.fileprovider", file);//在AndroidManifest中的android:authorities值
Log.d("======", "apkUri=" + apkUri); install.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//添加这一句表示对目标应用临时授权该Uri所代表的文件
install.setDataAndType(apkUri, "application/vnd.android.package-archive");
} else {
install.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
}
context.startActivity(install);
} catch (Exception e) {
Log.d("======", e.getMessage());
Toast.makeText(context, "文件解析失败", Toast.LENGTH_SHORT).show();
deleteFile(apkPath);
}
}

androidManifest.xml 里面注册provider

<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.chao.app.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>

需要添加权限

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

在/res/xml/下新建 file_paths.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<paths>
<external-path path="" name="download" />
</paths>
</resources>

最新文章

  1. 分布式系统:怎么简单地解释Paxos算法?从二段提交、三段提交讲到Paxos
  2. [问题2014A06] 解答
  3. HDU 1176免费馅饼 DP数塔问题转化
  4. Javascript之类型检测
  5. 前台传到servlet的乱码问题要怎么处理
  6. C/C++输入输出总结
  7. 从linux启动到rootfs的挂载分析
  8. java15 IO装饰设计模式
  9. get client machine name
  10. CentOS6.x升级MySQL版本号5.1到5.6
  11. Python中csv模块解析
  12. (网页)jQuery UI 实例 - 日期选择器(Datepicker)
  13. [LeetCode] 104. Maximum Depth of Binary Tree ☆(二叉树的最大深度)
  14. idea 安装三方插件的方法
  15. [mysqli_escape]mysql转义两次
  16. webgl之五彩光源
  17. c++ 多个线程读一个线程写同步
  18. js 几个重要的特性
  19. 1-4 TCP/IP协议族
  20. JavaScript的学习要点

热门文章

  1. ubuntu搭建ftp
  2. 动态区间第K大
  3. docker安装mysql挂载宿主本地目录资源后无法启动的问题
  4. 【Codeforces】879D. Teams Formation 思维+模拟
  5. slice 和 splice 区别
  6. 关于cuda 环境遇到的问题
  7. 51nod 1327 棋盘游戏——延迟决策的dp
  8. 使用svnsync实时备份SVN版本库
  9. mysql函数之七:replace() MySQL批量替换指定字段字符串
  10. kafka之三:kafka java 生产消费程序demo示例