Android 8.0+ 更新安装apk失败的问题

最近做项目发现Android 8.0+ 更新安装apk时 出现安装失败的情况  总结原因是 缺少安装的权限

Android 8.0 (Android O)为了针对一些流氓软件引导用户安装其他无关应用。在应用权限设置的“特殊访问权限”中,加入了“安装其他应用”的设置。

简单的方法  可以直接在Manifest.xml中加入下面的权限:(亲测可用)

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

另外当我们执行安装的代码后 都会加入杀死进程的代码 如下:

          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                uri = FileProvider.getUriForFile(this, "com.example.fileprovider",tempFile);
                   //此处为Uri临时授权
                intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            } else {
                uri = Uri.fromFile(tempFile);
            }
private void install(String apkPath) {      Intent intent = new Intent(Intent.ACTION_VIEW);        //Android 7.0+ 需要用FileProvider的方式访问隐私目录(比如相册)       if (Environment.SYSTEM_VERSION_CODE >= Build.VERSION_CODES.N) {           uri = FileProvider.getUriForFile(this, "com.example.fileprovider",tempFile);            //此处为Uri临时授权           intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);           uri = Uri.fromFile(tempFile);       }else{           uri = Uri.fromFile(tempFile);       }           intent.setDataAndType(uri, "application/vnd.android.package-archive");           intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);           context.startActivity(intent); 

//最后杀死进程       Handler mHandler=new Handler(context);               mHandler.postDealy(new Runnable(){                       public void run(){                             //或者是 System.exit(0);                            android.Process.KillProcess((android.os.Process.myPid());

}                   },500);//在这里延迟 500ms 是为了防止app使用FileProvider获取隐私文件时被杀死  导致安装失败

} 

原文地址:https://www.cnblogs.com/bimingcong/p/10344479.html

时间: 2024-12-28 20:59:44

Android 8.0+ 更新安装apk失败的问题的相关文章

android 6.0 Intent 安装apk闪退

需求描述: 利用android系统自带的DownloadManager下载apk文件,并且打开安装界面. 问题描述: 关于DownloadManager的使用网上有很多例子,在此不啰嗦.下载完成之后在android6.0(api=23)环境下打开安装界面出现闪退(确认已经在AndroidManifest.xml文件中配置配置权限).在Android4.4(api=19) 环境下正常.因为只有两台android手机,没有尝试android6.0之前的其他系统.使用代码如下: public stat

Android 8.0版本安装谷歌四件套

Android 8.0版本安装谷歌四件套可以玩苹果的游戏 com.google.android.gsf,是 Google Services Framework.com.google.android.gsf.login,是 Google Account Manager.com.google.android.gms,是 Google Play services.com.android.vending, 是 Google Play 商城. Google play商店.apkgoogle 框架服务.ap

Android 9.0更新

北京时间2018年8月7日上午,Google 发布了 Android 9.0 操作系统.并宣布系统版本 Android P 被正式命名为代号"Pie". Android 9.0 利用人工智能技术,让手机变得更智能.更快,并且还可以随着用户的使用习惯进行调整. 利用 Wi-Fi RTT 进行室内定位 Android 9 添加了对 IEEE 802.11mc Wi-Fi 协议(也称为 Wi-Fi Round-Trip-Time (RTT))的平台支持,从而让您的应用可以利用室内定位功能.

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 >

我的Android进阶之旅------&gt;解决Android Studio编译后安装apk报错:The APK file does not exist on disk

1.错误描述 今天用Android Studio编译应用后安装APK的时候,报错了,错误如下所示: The APK file build\outputs\apk\OYP_2.3.4_I2Base_6476_official_debug.apk does not exist on disk. Error while Installing APK 如下图所示 2.解决方法 1.尝试了Build -> Clean Project再编译,还是无效 2.尝试重启Android Studio无效 然后我去打

android 入门-使用adb安装apk到多设备

我想用adb 安装apk 到设备上现在出现了2个. 提示我没有找到设备 安装不用进去adb shell 这是你存放apk文件夹路径 下面安装apk到手机上 下面安装apk到模拟器上 下面卸载apk

Android 下得到 未安装APK包含信息 等

很多情况下,我们需要通过APK文件来得到它的一些信息. (此时此APK不一定被安装了) 0. 基础知识:可以通过android.content.Context的方法 getPackageManager()得到一个PackageManager实例.PackageManager有一个方法:PackageInfo getPackageArchiveInfo (String archiveFilePath, int flags):其中参数一:archiveFilePath.就是指一个APK文件绝对路径.

android模拟器中如何安装apk

1.在Eclipse中启动模拟器. 2.打开doc命名窗口,转到你android sdk安装目录中的platform-tools下,如:E:\android\android-sdks\platform-tools. 3.将要安装的apk拷到platform-tools所在的目录下,然后在doc下输入: adb install xxxxxx.apk 稍等片刻,提示success

AndroidStdio小米手机安装APK失败

解决办法,关闭开发选项小米优化即可.