关于版本更新中下载安装APK出现的大坑

  1. 首先常见做法下载设置存放路径
 if (Environment.getExternalStorageState().equals(
                                Environment.MEDIA_MOUNTED)) {
                            // 获得存储卡的路径
                            String sdpath = Environment.getExternalStorageDirectory()
                                    + "/";
                                mSavePath = sdpath + "download";
                        } else {
                   //内部存储 
                            mSavePath = "/data/data/" + context.getPackageName() + "/files";
                        }

2.下载完成进行安装APK

   Intent i = new Intent(Intent.ACTION_VIEW);
                if (file != null && file.length() > 0 && file.exists() && file.isFile()) {
                    if (Build.VERSION.SDK_INT >= 24) {//判读版本是否在7.0以上
                        Uri apkUri = FileProvider.getUriForFile(UpDateActivity.this, "com.quanzhichuxing.renter.fileprovider", file);//在AndroidManifest中的android:authorities值
                        Intent install = new Intent(Intent.ACTION_VIEW);
                        install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        install.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//添加这一句表示对目标应用临时授权该Uri所代表的文件
                        install.setDataAndType(apkUri, "application/vnd.android.package-archive");
                        startActivity(install);
                    } else {
                        Intent install = new Intent(Intent.ACTION_VIEW);
                        install.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
                        install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(install);
                    }
                }

似乎没问题,假如手机是没有sd卡,比如我测试的一款三星Note4,存储在内部data/data/包名底下,一切就不是那样了,直接就


关于版本更新中下载安装APK出现的大坑_第1张图片
微信图片_20180529161128.jpg

意不意外,刺不刺激。
3.解决办法
原来是内部存储 文件没有执行权限所以需要添加权限

   String cmd = "chmod 777 " + file.toString();
                        try {
                            Runtime.getRuntime().exec(cmd);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }

这样就有权限了
(PS:假如还是出现解析失败,那么请尝试如下修改)

                        install.setDataAndType(Uri.parse("file://"+file.toString()), "application/vnd.android.package-archive");

修改下uri方式

你可能感兴趣的:(关于版本更新中下载安装APK出现的大坑)