android 版本更新7.0,8.0 兼容

本文介绍了在Android 7.0.0到8.0.0之间,更新和下载应用时遇到的问题及解决方案。对于7.0.0以上版本,需在清单文件和res-xml-file-paths.xml中配置provider,同时在安装代码中检查权限。对于8.0.0及以上版本,由于权限问题,需在主配置文件添加权限,并在fragment中正确请求权限。文章还提供了解决小米手机更新失败的参考链接。
摘要由CSDN通过智能技术生成

1.情况:在android版本>=7.0.0 && android 版本<8.0.0 更新下载app失败:

解决:配置provider

1.清单文件:

       <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="com.xx.xxx.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true"
            >
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

2.res-xml-file-paths.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <paths>
        <external-path path="" name="download" />
    </paths>
</resources>

 3.安装代码:

  /**
     * 通过隐式意图调用系统安装程序安装APK
     */
    public static void install2(Context context) {
        File file = new File( Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "xxx.apk");
        Intent intent = new Intent(Intent.ACTION_VIEW);
        // 由于没有在Activity环境下启动Activity,设置下面的标签
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        if(Build.VERSION.SDK_INT>=24) { //判读版本是否在7.0以上

            StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
            StrictMode.setVmPolicy(builder.build()); builder.detectFileUriExposure();

            //参数1 上下文, 参数2 Provider主机地址 和配置文件中保持一致   参数3  共享的文件
            Uri apkUri = FileProvider.getUriForFile(context, "com.xx.xxx.fileprovider", file);
            //添加这一句表示对目标应用临时授权该Uri所代表的文件
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
        }else{
            intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值