解决APK下载到Cache目录安装提示“解析安装包失败”的问题

下载的APK在使用下面代码安装的时候提示解析安装包失败,APK本身没有问题,使用手机助手或者adb install 都可以正常安装。
 /**
     * 安装应用程序
     */
    public void installAPK(String path) {
        File apkfile = new File(path);
        if (!apkfile.exists())
            return;
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true); //表明不是未知来源
        intent.setDataAndType(Uri.parse("file://" + apkfile.toString()),
                "application/vnd.android.package-archive");
        ((Activity)context).startActivityForResult(intent, 0);
    }
截取的Log如下

从日志里可以看出来是PermissonDenied,failed to open, Unable to read。测试后发现文件存储在程序Cache目录下才会出现这个问题,存储在SD卡并不报错, 所以在installApk方法中加一个chmod方法更改文件的访问权限问题解决!
 /**
     * 安装应用程序
     */
    public void installAPK(String path) {
        File apkfile = new File(path);
        if (!apkfile.exists())
            return;
        chmod("777", path); //更改文件权限
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true); //表明不是未知来源
        intent.setDataAndType(Uri.parse("file://" + apkfile.toString()),
                "application/vnd.android.package-archive");
        ((Activity)context).startActivityForResult(intent, 0);
    }
/**
    * 获取权限
    *
    * @param permission
    *            权限
    * @param path
    *            路径
    */
    public  void chmod(String permission, String path) {
    try {
    String command = "chmod " + permission + " " + path;
    Runtime runtime = Runtime.getRuntime();
    runtime.exec(command);
    } catch (IOException e) {
    e.printStackTrace();
    }
    }



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值