Android 7.0安装apk

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

在做应用版本更新的时候使用Android 7.0的手机测试发现一个问题:下载完成安装包之后,不能跳转到安装界面,使用7.0以下的手机没遇到这种情况。

对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file:// URI。
如果一项包含文件 URI 的 intent 离开您的应用,则应用出现故障,并出现 FileUriExposedException 异常。

要在应用间共享文件,您应发送一项 content:// URI,并授予 URI 临时访问权限。进行此授权的最简单方式是使用 FileProvider 类。
既然Android 7.0对文件访问做了限制,下面介绍如何利用FileProvider类进行授权:

1 . 在清单文件中定义一个FileProvider

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">
    <application
        ...>
        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="com.example.myapp.fileprovider"
            android:grantUriPermissions="true"
            android:exported="false">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/filepaths" />
        </provider>
        ...
    </application>
</manifest>
2 . 指定共享目录
在上面代码中android:resource="@xml/filepaths" ,说明在我们的项目中有一个filepaths.xml文件,它记录了我们共享文件的位置,这个文件在项目中结构中的位置 : res/xml/filepaths.xml


filepaths.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-files-path path="Download/" name="Download" />
    <!--物理路径相当于Context.getExternalFilesDir(String) + /Download/ -->
</paths>
上述内容指定了要分享文件的目录位置,对于我们下载安装apk来说,即apk文件下载到了手机的什么目录位置,一定要与自己apk的下载目录相同!
我项目中apk包的下载位置是

context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
/storage/emulated/0/Android/data/your-package/files/Download/appName.apk
下面还有一些path路径,请根据自己apk包的下载位置选择合适的path
<files-path name="name" path="path" /> 物理路径相当于Context.getFilesDir() + /path/

<cache-path name="name" path="path" /> 物理路径相当于Context.getCacheDir() + /path/

<external-path name="name" path="path" /> 物理路径相当于Environment.getExternalStorageDirectory() + /path/

<external-files-path name="name" path="path" /> 物理路径相当于Context.getExternalFilesDir(String) + /path/

<external-cache-path name="name" path="path" /> 物理路径相当于Context.getExternalCacheDir() + /path/
3 . 安装apk
private void installApk() {
    File file = new File(apk包的路径);
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    if(Build.VERSION.SDK_INT>=24) { //Android 7.0及以上
        // 参数2 清单文件中provider节点里面的authorities ; 参数3  共享的文件,即apk包的file类
        Uri apkUri = FileProvider.getUriForFile(context, "com.example.myapp.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-archive");
    }
    context.startActivity(intent);
}

想了解更多Android 7.0与之前版本的不同,详情请看 Android 7.0 行为变更

Android7.0、8.0应用内安装apk实现 最近,公司线上项目发现,部分手机应用内更新下载apk安装无反应的问题。由于测试我并未参与,得知同事的问题描述后误认为是部分机型的兼容性问题,费了半天劲。最后才发现是Andorid8.0权限问题,很是恼火啊,哈哈。鉴于此,还是把不同Android版本正确发起应用内安装的实现分享给大家。 首先将现有的Android版本进行分一下界限,Android 1.x~6.x 和Android 7.x 及An... 阅读详情

相关推荐

安卓7.0系统解包软件

安卓7.0系统解包软件,支持6.0,个人亲测有效,一键解包,打包工具

Android 7.0下载安装APK

Android 7.0下载安装APK博客地址:http://blog.csdn.net/jsonnan/article/details/74353748

Android7.0下载Apk自动安装

下载自动安装Demo,兼容7.0

android官方升级包下载安装,安卓7.0正式版安装包下载

安卓7.0正式版安装包是一款针对低端手机打造的安卓系统。目前运行Android 7.0开发者预览版的设备能够第一时间收到推送,而还处于Android 6.0的设备则需要更长时间,用户可以通过线刷的方式来让自己的手机进行升级。【全新功能】分屏多任务进入后台多任务管理页面,然后按住其中一个卡片,然后向上拖动至顶部即可开启分屏多任务,支持上下分栏和左右分栏,允许拖动中间的分割线调整两个APP所占的比例。...

weixin_39696197的博客 1万+

android 7.0安装包,安卓7.0安装包,安卓7.0通用升级安装包免费预约 v7.0-手游汇

安卓7.0安装包解决了之前老版本系统出现的一些问题,使手机运行更加流畅快速,减少出现卡顿死机的情况,并且新增了许多个性化功能,比如流量保护模式,会在超出手机设定流量范围后进行提醒,避免产生不必要的流量费。安卓7.0通用升级包vivo功能:1.从顶部下划打开快捷设置页,然后长按其中的设置图标,齿轮旋转10秒钟左右即可提示已开启系统调谐器。2.谷歌在安卓7.0中重新加入了夜间深色主题模式,该功能依然需...

weixin_26821003的博客 4218

android 7.0以上安装apk

由于安卓7.0加强了用户权限问题,所以我们需要稍作修改,让我们的程序正常升级安装apk 1.首先在res下建立一个xml文件夹 我们随便起个名字,就叫file_path好了 这里注意我们要修改里面的包名和文件夹名改成自己程序的 <?xml version="1.0" encoding="utf-8"?> <paths> <external-pat...

柳的博客 2653

android 7.0安装apk

今天做项目中的版本更新功能,竟然发现以前安装apk的代码在Android7.0中用不了,于是乎各种百度,终于解决了这个问题,故在此与大家分享,希望能帮到大家。 Android系统升级到7.0之后,安全性提高了不少,直接使用我们之前安装apk的代码app会直接崩掉,看下面的代码和错误: Intent intent = new Intent(Intent.ACTION_VIEW); intent...

qq_36887882的博客 4397

android apk无法安装高版本号,android 使用FileProvider 兼容apk7.0版本无法安装

源头都是因为一个bugandroid.os.FileUriExposedException:file:///storage/emulated/0/mwh/app.apk exposed beyond app through Intent.getData()复制代码因为这个bug 显示 原来的 apk安装方法无法在高于7.0 的手机系统安装apk了。所以就得需要使用FileProvider 来做兼...

weixin_42613572的博客 891

unity 调用android 的 aar包 在安卓版本7.0 以上 安装覆盖更新版本 apk

此博客在于解决unity开发人员 android7.0权限 不能覆盖安装apk问题 直接上代码 直接附上项目下载地址 这是unity 调用android 的 aar包 可以在安卓版本7.0安装覆盖更新版本。 附网址 https://download.csdn.net/download/qq_39735878/11183662 ...

qq_39735878的博客 768

Android7.0版本升级安装

处理Android7.0版本升级和自动安装存在的问题,对权限的控制问题。

Android7.0下载APK自装

【源码免费下载链接】:https://renmaiwang.cn/s/kjabn 在Android系统中,自7.0版本起引入了名为"安全安装器"(Scoped Installers)的新特性。这一新增功能项旨在限制非Google Play商店应用的自动安装,并要求用户主动申请必要的权限。本文将深入探讨在Android系统中通过自动化流程下载并安装APK包的技术细节。理解这些权限控制机制对于成功实施APK自动安装至关重要。 需要特别注意的是,该危险权限通常只有系统应用才能申请。在Android配置文件中指定该权限:```xml<uses-permission android:name="android.permission.INSTALL_PACKAGES"/>``` 启动数据写入过程时,请确保获取必要的安装参数对象,并检查当前用户是否已授予所需权限。如果授权成功,则可以利用`PackageInstaller`类来完成APK安装。这个新功能在Android 7.0中首次出现,提供了简便的方式进行自动化的APK安装操作。 以下是一个完整的示例代码片段:```java// 获取必要的安装参数对象PackageManager packageName = getPackageName();final PackageInstallerSessionParams params = new PackageInstallerSessionParams(PackageInstallerSessionParams.MODE_FULL_INSTALL);params.setPackageName(packageName);int sessionId = packageInstaller.createSession(params);``` 启动数据写入过程时,请确保获取必要的安装参数对象,并检查当

瑞友天翼应用虚拟化系统(GWT)V7.0服务器端和谐补丁

瑞友天翼应用虚拟化系统(GWT)V7.0服务器端和谐补丁

下载安装APK(兼容Android7.0)

我们使用手机的时候经常会看到应用程序提示升级,大部分应用内部都需要实现升级提醒和应用程序文件(APK文件)下载。一般写法都差不多,比如在启动app的时候,通过api接口获得服务器最新的版本号,然后和本地的版本号比较,来判断是否需要弹出提示框下载,当然也可以通过推送的自定义消息来实现。我们这里主要讨论的是应用程序下载,并在通知栏提醒下载完成。 实现过程大致分为三步: 创建一个service 在ser

老于的笔记的专栏 3万+

android 7 apk 安装程序,Android 7.0 apk安装

简介Android 7.0开始,系统修改了安全机制:限定应用在默认情况下只能访问自身应用数据。所以当我们想通过File对象访问其它package数据时,就需要借助于ContentProvider、FileProvider这些组件,否则会报FileUriExposedException异常。由此,当我们在app内想要访问SD卡download目录下的apk文件就会报错。这里需要借助FileProvi...

weixin_42651281的博客 1290

android 7 apk 安装程序,Android安装apk文件并适配Android 7.0详解

Android安装apk文件并适配Android 7.0详解首先在AndroidManifest.xml文件,activity同级节点注册provider:android:name="android.support.v4.content.FileProvider"android:authorities="${applicationId}.file_provider"android:exported...

weixin_35732670的博客 1155

android7.0打开apk,Android7.0、8.0 apk安装

第一步(Android7.0 以后需配置FileProvider)在AndroidManifest.xml 配置 FileProvider为了防止重复 android:authorities 一般配置为 包名.fileProviderandroid:name="android.support.v4.content.FileProvider"android:authorities="包名.fileP...

weixin_39716417的博客 427

Android7.0应用内安装apk适配

一、为什么要适配 从 2018 年 8 月 1 日起,所有向 Google Play 首次提交的新应用都必须针对 Android 8.0 (API 等级 26) 开发; 2018 年 11 月 1 日起,所有 Google Play 的现有应用更新同样必须针对 Android 8.0。 国内情况:为保障华为用户的使用体验,华为应用市场已在7月份启动Android P版本应用适配检测工作,针对未做适...

walk的博客 1万+

如何在Android7.0系统下通过Intent安装apk

如何在Android7.0系统下通过Intent安装apk Android系统升级到7.0之后,安全性提高了不少,过去我们通常是使用这样的代码进行apk安装操作。 1 2 3 Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(apkFile),

wdd1324的博客 1047
上一篇: 如何改变图片的尺寸大小得到一张缩小后的图片
下一篇: Android 设置应用的底部导航栏(虚拟按键)背景颜色
github_2011
博客等级 码龄10年 116粉丝 56原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值