android--应用内更新app

本文总结了Android应用在线更新过程中遇到的适配问题,主要针对Android 7.0和8.0的新限制。在7.0上,需使用FileProvider解决文件访问权限;在8.0上,需处理未知来源应用安装权限。提供了详细的适配步骤和解决方案。
摘要由CSDN通过智能技术生成


app在线更新是一个比较常见需求,新版本发布时,用户进入我们的app,就会弹出更新提示框,第一时间更新新版本app。在线更新分为以下几个步骤:

  1. 通过接口获取线上版本号,versionCode
  2. 比较线上的versionCode 和本地的versionCode,弹出更新窗口
  3. 下载APK文件(文件下载)
  4. 安装APK
    在后2个步骤,而由于Android 各个版本对权限和隐私的收归和保护,因此,会出现各种的适配问题,因此本文就总结一下app 在线更新方法和遇到的一些适配问题。
File apkFile = new File(saveFileFullName);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
uri = Uri.fromFile(apkFile);//file:///storage/emulated/0/temp.apk
intent.setDataAndType(uri, "application/vnd.android.package-archive");
startActivity(intent);

在6.0及以下版本,可以正常安装,但是在7.0及以上版本会报错。

android各版本新增限制

  • Android 7.0:对文件的访问权限作出了修改,不能在使用file://格式的Uri 访问文件 ,Android 7.0提供FileProvider,应该使用这个来获取apk地址,然后安装apk。如下进行简单的适配:
  • Android 8.0:未知来源的应用是不可以通过代码来执行安装的(在sd卡中找找到apk,手动安装是可以的),未知应用安装权限的开关被除掉,取而代之的是未知来源应用的管理列表,需要列表里面开启你的应用的未知来源的安装权限。Google这么做是为了防止一开始正经的应用后来开始通过升级来做一些不合法的事情,侵犯用户权益。

适配Android 7.0

(1)在res 目录下,新建一个xml 文件夹,在xml 下面创建一个文件provider_paths文件

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

name可以任意取
(2)在AndroidManifest.xml清单文件中申明Provider:

<!APK下载保存路径-->
        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="packgeName.fileProvider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths" />
        </provider>

(3)Android 7.0上的文件地址获取:

uri = FileProvider.getUriForFile(context,
                        "packageNam.fileProvider",
                        
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值