android安装包踩坑

最近公司遇到一个关于安装包的问题,出现的情况有两个:一个是8.0的手机下载完成以后不能跳转到系统安装界面进行安装;

另一个就是安装包下载下来以后,在安装过程中出现解析失败现象。

首先针对情况二进行分析:

我拿到的项目是有的android自带的下载安装那一套,安装失败,我换成了平常下载文件的方法,用流去操作,就ok了,说来也奇怪。。。。下载成功以后保存到路径:Environment.getExternalStorageDirectory()+“/vip.apk”;注意这里路径不能一定不能出现中文的,然后跳转到系统升级的界面去

  /**
     * 升级
     */
    void update() {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//Build.VERSION_CODES.N 这里我的版本是24
            intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_ACTIVITY_NEW_TASK);
            Uri contentUri = FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".fileprovider", new File("/storage/emulated/0/vip.apk"));
            intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
        } else {
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "vip.apk")), "application/vnd.android.package-archive");
        }
        startActivity(intent);

    }

下面来说第二种:我拿到的项目是没有做android 8.0的兼容的,而且由于android8.0做了更严格的权限,所以根本就不会跳转到系统安装界面去,上面的代码可以继续用,只不过在Mainifest中加一项权限就可以了。

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

最后,说一下上面用到了Android 的组件Content Provider,在在 Mainifest文件中增加provider节点,

<provider
            android:name="android.support.v4.content.FileProvider"
    android:authorities="你的包名.fileprovider"//(如你应用程序包名为com.you.ming,则应该是com.you.ming.fileprovider)
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />//@xml/file_paths 这个表示你要在res的xml目录下新建的一个资源文件,名字叫file_paths

        </provider>

节点建完,接下来最后一步,建res目录下xml资源文件,

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path
        name="files_root"
        path="Android/data/com.you.ming/" />
    <external-path
        name="external_storage_root"
        path="." />
    <external-path
        name="camera_photos"
        path="." />

</paths>

还有人说可以这样建

 <resources>
    <paths>
        <external-path path="" name="download"/>
    </paths>

</resources>

(provider作为android四大组件之一,也可以看作是android的存储方式之一),好了,ok了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值