/*** 判断是否是8.0,8.0需要处理未知应用来源权限问题,否则直接安装*/
private void checkIsAndroidO() {if (Build.VERSION.SDK_INT >= 26) {boolean b = getPackageManager().canRequestPackageInstalls();if (b) {ToolsUtil.installApk(WelcomeActivity.this, ToolsUtil.getApkDir() + ToolsUtil.getApplicationName() + ".apk");//安装应用的逻辑(写自己的就可以)} else {//设置安装未知应用来源的权限Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);startActivityForResult(intent, 10012);}} else {ToolsUtil.installApk(WelcomeActivity.this, ToolsUtil.getApkDir() + ToolsUtil.getApplicationName() + ".apk");}
}@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == 10012) {checkIsAndroidO();}
}
ToolsUtil
private static boolean hasSDCard = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);private static String getAppDir() {if (hasSDCard) { // SD卡根目录的hello.textreturn Environment.getExternalStorageDirectory() + "/CarSystem";} else {  // 系统下载缓存根目录的hello.textreturn Environment.getDownloadCacheDirectory() + "/CarSystem";}
}private static String mkdirs(String dir) {File file = new File(dir);if (!file.exists()) {file.mkdirs();}return dir;
}public static String getApkDir() {String dir = getAppDir() + "/apk/";return mkdirs(dir);
}
/*** 安装APK** @param context* @param apkPath*/
public static void installApk(Context context, String apkPath) {if (context == null || TextUtils.isEmpty(apkPath)) {return;}File file = new File(apkPath);Intent intent = new Intent(Intent.ACTION_VIEW);//判读版本是否在7.0以上if (Build.VERSION.SDK_INT >= 24) {//provider authoritiesUri apkUri = FileProvider.getUriForFile(context, "你的包名", file);//Granting Temporary Permissions to a URIintent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setDataAndType(apkUri, "application/vnd.android.package-archive");} else {intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");}context.startActivity(intent);
}
7.0以上需要用数据共享AndroidMainifest 配置如下:
<!--数据共享-->
<providerandroid:name="android.support.v4.content.FileProvider"android:authorities="你的包名"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_path" />
</provider>
在res文件夹下新建xml文件夹,并建立xml子文件file_path
<?xml version="1.0" encoding="utf-8"?>
<paths><external-path name="CacheCarSystem" path="CarSystem"/>
</paths>
<files-path/>代表的根目录: Context.getFilesDir()<external-path/>代表的根目录: Environment.getExternalStorageDirectory()<cache-path/>代表的根目录: getCacheDir()
path="CarSystem"表示你要共享的文件夹

可参考:http://www.czhzero.com/2016/12/21/how-to-install-apk-on-Android7-0/

Android8.0 安装apk相关推荐

  1. Android8.0安装apk报错:Package xxx is currently frozen

    问题出现 App版本更新时,使用Android 8.0的手机会出现问题:安装包下载完成之后,屏幕闪了一下并没有跳转到安装界面,使用8.0以下的手机并没有这个问题,查看异常信息,发现如下警告 java. ...

  2. Android 7.0/8.0 安装APK时解析包错误问题

    在 Android 7.0 引入了"私有目录被限制访问",通过使用FileProvider来解决问题,但是在安装应用时却出现了解析包出错的问题 来检查一下代码 private vo ...

  3. Android7.0+安装apk文件之后不弹出安装完成的界面解决办法

    在Android7.0+手上,版本升级完成,发现手机安装完成,不启动安装完成页面,而是直接关闭了,小编也是一头雾水.琢磨了很久,下面小编把解决办法show出来. 第一步:在资源文件下面新建 xml文件 ...

  4. AppUtils【获取手机的信息和应用版本号、安装apk】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 一个获取设备的系统版本号.设备的型号.应用版本号code值.应用版本号name值.包名.是否更新.安装apk的工具类. 其实这个工具 ...

  5. Android8.0+应用内更新安装apk失败

    描述 应用内更新,下载apk调用系统api进行安装,在android8.0+手机上无法安装,在android8.0以下可以安装成功,看了看google for android 官网得知android8 ...

  6. 华为android7.0 root,android7.0更新安装apk的方法

    StrictMode模式 从android7.0开始强制启用StrictMode"严苛模式".StrictMode是在android2.3引进的类.当时它的作用是作为一个开发工具用 ...

  7. Android8.0未知来源应用安装权限最好的适配方案

    Android8.0未知来源应用安装权限最好的适配方案 你弄啥嘞 24 天前 Android8.0的诸多新特性中有一个非常重要的特性:未知来源应用权限 以前安装未知来源应用的时候一般会弹出一个弹窗让用 ...

  8. Android应用安装apk版本升级,适配Android 8.0和Android 10.0下载安装,shell命令安装APK

    shell命令安装 /*** 安装apk** @param path apk文件路径*/ public void installAPK(String path) {Log.i(TAG, "i ...

  9. FileProvider N 7.0 升级 安装APK 选择文件 拍照 临时权限 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

最新文章

  1. Python:urllib2模块Handler处理器 和 自定义Opener
  2. 北京工商大学计算机考研818真题,2017年北京工商大学计算机与信息工程学院818数据结构考研仿真模拟题...
  3. activeMQ使用总结
  4. clone远程代码 在不同电脑上git_用树莓派3搭建私有git代码仓库
  5. $_FILE函数总结
  6. TCP流中各种队列:
  7. JAVA导出excel如何设置表头跨行或者跨列,跪求各位大神了
  8. 拦截游戏窗口被移动_熊孩子骗家长人脸识别? 腾讯游戏出了个新招
  9. 苏宁大数据怎么运营_苏宁易购的经营模式
  10. vue2+vuex+vue-router 快速入门(三) vue 实例介绍
  11. 计算机专业三年级的学生英语,计算机专业英语 计算机专业英语对照表.doc
  12. LeetCode 要记得一些小trick
  13. vagrant 学习
  14. 重载前自增运算符和后自增运算符
  15. (25)梯度下降法求解曲面极小值
  16. php批量修改文件夹名称的功能,php实现批量修改文件名称
  17. UILabel 首行缩进两个字符
  18. 武汉财贸学校2020计算机应用,2021年武汉市财贸学校招生简章
  19. 图解系统(六)——调度算法
  20. Linux管道到底能有多快?

热门文章

  1. win11系统右键还原win10菜单和恢复
  2. android网易七鱼客服系统
  3. 华信mysql数据恢复_华信安卓手机数据恢复程序3.0
  4. Ubuntu 16.04下Intel SGX SDK环境搭建(硬件不支持情况)
  5. c语言软件看门狗程序,X25045看门狗电路硬件连接图及C语言看门狗程序
  6. 行内元素与块级元素区别1.0
  7. Weka Explorer(探索者界面) 详解(1)
  8. TMS320F28335调用官方库进行FFT频谱分析
  9. python爬虫课设报告_python爬虫小说设计报告 相关实例(示例源码)下载 - 好例子网...
  10. AI一分钟 | 无人驾驶技术排名:百度居中游,苹果特斯拉垫底;Google在深圳设立办公室