Android 8.0安装apk

Android 11 适配指南 Android11 适配 阅读详情
AI摘要

针对Android 8.0取消未知来源应用安装提示的问题,本文介绍如何在应用中请求安装未知应用的权限,并提供相应的代码实现。

前一段时间在做App版本更新时,使用Android 8.0的手机测试发现一个问题:安装包下载完成之后,屏幕闪了一下并没有跳转到安装界面,使用8.0以下的手机并没有这个问题。

Android 8.0 Oreo 中,Google 移除掉了容易被滥用的“允许位置来源”应用的开关,在安装 Play Store 之外的第三方来源的 Android 应用的时候,竟然没有了“允许未知来源”的检查框,如果你还是想要安装某个被自己所信任的开发者的 app,则需要在每一次都手动授予“安装未知应用”的许可。

那么对于Android开发者来说适配Android 8.0(仅限应用版本更新方面)需要做哪些工作呢?

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

清单文件添加安装未知来源应用的权限

在应用下载完成进入安装界面之前会弹出如下对话框:


点击 SETTINGS 按钮进入如下界面:


打开允许开关,点击返回键自会进入安装界面(安装流程略)

对于Google Oreo的这一变更,我们只在清单文件中加一个权限,一行相关代码都没写显然太轻松了,接下来我们写点代码更好的处理一下这一新变更。

    /**
     * 判断是否是8.0,8.0需要处理未知应用来源权限问题,否则直接安装
     */
    private void checkIsAndroidO() {
        if (Build.VERSION.SDK_INT >= 26) {
            boolean b = getPackageManager().canRequestPackageInstalls();
            if (b) {
                installApk();//安装应用的逻辑(写自己的就可以)
            } else {
                //请求安装未知应用来源的权限
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.REQUEST_INSTALL_PACKAGES}, INSTALL_PACKAGES_REQUESTCODE);
            }
        } else {
            installApk();
        }

    }

应用下载完成之后调用该方法,处理Android 8.0系统的这一变更。

PackageManager类中在Android Oreo版本中添加了一个方法:判断是否可以安装未知来源的应用
public abstract boolean canRequestPackageInstalls();

首次进行版本更新时,我们得到的应该是false,因为系统默认并没有允许该权限。我们可以请求该权限,在权限请求结果的回调中处理逻辑如下:

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case INSTALL_PACKAGES_REQUESTCODE:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    installApk();
                } else {
                    Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
                    startActivityForResult(intent, GET_UNKNOWN_APP_SOURCES);
                }
                break;
  
        }
    }
若是没有获得该权限,我们可以使用Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES intent 操作将用户引导至安装未知应用界面。

用户点击我们的App item 则进入我们之前见到的那个开关页面


用户允许该来源之后,我们的处理如下:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case GET_UNKNOWN_APP_SOURCES:
                checkIsAndroidO();
                break;

            default:
                break;
        }
    }
如果用户允许了安装该来源的应用,则自会进入安装界面。
通过 设置 应用 查看我们的应用详情我们会发现与之前稍有不同:

在应用详情列表的底部明显有一条分割线,分割线下面是高级部分,在之前的应用中是没有这一部分的,安装未知来源的应用在这一高级部分中。

点击进入:


发现又到了这一开关界面,如果我们将这一开关打开,那么下次应用版本更新的时候判断已经允许了未知来源的应用,就可以直接安装了,无需用户再手动授权允许。


Android 13.0 根据包名授予OP_REQUEST_INSTALL_PACKAGES权限 在系统13.0的定制化开发中,对于在app中调用安装第三方app的时候,会在这时弹出安装未知来源弹窗,需要默认授予REQUEST_INSTALL_PACKAGES 权限,来安装第三方app的安装未知来源权限,所以就是今天需要解决的这个问题 阅读详情

相关推荐

Android12.0 根据包名授予OP_REQUEST_INSTALL_PACKAGES权限

在系统12.0的定制化开发中,对于在app中调用安装第三方app的时候,会在这时弹出安装未知来源弹窗,需要默认授予REQUEST_INSTALL_PACKAGES 权限,来安装第三方app的安装未知来源权限,所以就是今天需要解决的这个问题

安卓兼职framework和app工程师的博客 3038

Google Play的QUERY_ALL_PACKAGES或REQUEST_INSTALL_PACKAGES权限问题

应用发布Google Play的QUERY_ALL_PACKAGES或REQUEST_INSTALL_PACKAGES权限问题

墨客 9218

DeepSeek Harness实战:从零构建插件化AI Agent

AI Agent开发正从硬编码走向框架化组织,插件化架构成为提升工程效率的关键。在构建可复用、可扩展的智能体系统时,开发团队需要一套能够统一管理模型调用、工具注册与上下文组装的基础设施。DeepSeek Harness作为面向Agent工程的插件化框架,通过Harness、DeepAgent与Skill三个核心抽象,将模型、工具与技能解耦为可插拔单元,让开发者无需重复造轮子即可快速搭建具备工具调用能力的智能体。本文从环境配置到Skill插件开发,完整演示如何基于DeepSeek模型构建一个可运行的Agent

weixin_34279184的博客 441

android最新版本8.0,安卓8.0系统安装包下载

安卓8.0系统安装包是一款全新的安卓系统。在这个版本中图标跟之前的安卓7.0对比的话会有一些改变,取消了左侧的汉堡菜单,整体菜单变得更加简洁规整,配色上也相当低调,进行使用的话需要了解里面的具体功能才可以刷机。【功能特点】Android7.0上谷歌已经为通知中心提供了根据app整合的特性,这一次AndroidO的通知中心提供了更多的API给开发者进行定制,例如利用NotificationChann...

weixin_39686048的博客 1万+

Oracle EBS Interface/API(29) - AP发票API

续上编文章《Oracle EBS Interface/API(28) - 客制化开发AP付款API》背景,介绍如调用官方提供标准AP发票API调用 用户界面 Invoices(Payables Manager->Invoices->Entry->Invoices) Open Interface Invoices(Payables Manager->Invoices->Entry->Open Interface Invoices) 快速参考 参考点 内容.

陈显平的专栏-Oracle EBS 1150

【Python计量】linearmodels面板数据回归(一)

我们以伍德里奇《计量经济学导论现代方法》的”第14章高级面板数据方法“的案例14.1为例,使用jtrain中的数据来进行固定效应估计。

mfsdmlove的博客 9275

android 安装apk 代码,Android 8.0安装apk的实例代码

android 8.0安装apk需要请求未知来源权限//xml配置/*** 检测版本8.0*/public void checkOreo() {if (SdkVersionUtils.hasOreo()) {//8.0//判断是否可以直接安装boolean canInstall = getPackageManager().canRequestPackageInstalls();if (canIns...

weixin_34835470的博客 1249

ISP算法:自动白平衡(AWB)

1. 为什么要做白平衡? 人类视觉系统具有颜色恒常性特点,一次人类对物体观察不受光源影响。但是Sensor在不同光线下,物体呈现的颜色不同,在晴朗天空下会偏蓝,在烛光下会偏红。如图: 2.什么是自动白平衡? 为了消除光源对于图像传感器成像的影响,模拟人类视觉系统的颜色恒常性。保证在任何场景下看到的白色是真正的白色。 3. 如何做自动白平衡? 只要乘以一个对角矩阵,便可以进行白平衡...

a200800170331的专栏 1万+

Android8.0安装apk没反应

今天在开发过程中遇到了一个问题,在apk更新下载后执行安装时,程序没有反应,如下: /* * 下载到本地后执行安装 */ protected void installAPK() { File apkFile = new File(mUpgradePath, "abc.apk"); if (!apkFile.exists()) ...

FrancisBingo的博客 3535

springboot&mybatis中数组和字符串数据类型的转换

/前端数组字段//数据库中字段/*与前端交互时使用的get/set*/System.out.println("接收前端数据");/*与前端交互时使用的get/set*//*与数据库交互时使用的get/set*/System.out.println("从数据库中读取数据");/*与数据库交互时使用的get/set*/

l_q_l的专栏 2475

Cesium功能集(十二):Cesium中流体仿真

【代码】Cesium功能集(十二):Cesium中流体仿真。

GIS肆月 600

android8.0 安装apk没反应问题。

原因:Android8.0的诸多新特性中有一个非常重要的特性:未知来源应用权限。 以前安装未知来源应用的时候一般会弹出一个弹窗让用户去设置允许还是拒绝,并且设置为允许之后,所有的未知来源的应用都可以被安装。 Android8.0的变化是,未知应用安装权限的开关被除掉,取而代之的是未知来源应用的管理列表,需要在里面打开每个应用的未知来源的安装权限。Google这么做是为了防止一开始正经的应用后来...

toast_tips的博客 3138

17、扩展景深成像的瞳孔函数工程技术解析

本文详细解析了扩展景深成像的关键技术,包括基于焦距堆栈的数字处理方法、立方相位掩模的光学设计、对数非球面透镜的应用以及旋转点扩散函数的深度编码功能。通过实验验证和实际应用分析,展示了这些技术在显微镜成像、工业检测和医疗影像中的广泛用途及优势。同时探讨了未来发展方向,如智能算法优化、新型光学材料和多模态成像技术,为相关领域的技术创新提供了参考。

y2z3a4b5c的博客 168

Android 下载安装应用APK封装(适配8.0)

一、简介 二、效果预览 ​三、实现步骤 四、功能解析 五、Demo地址 六、内容推荐 一、简介 嘿嘿,这周没缺席,继续给大伙们提供一个工具类。用于下载APK,安装应用。几乎每个APP都带有这个功能,通过链接下载APK后,进行安装升级应用。如果要自己重新写的话 ,可能要花半个或一个多小时。不过写过一遍后,下次实现起来就简单许多了。所以嘛,作者就做了这个简单封装类。你们只需CP,不说...

斌林诚上的博客 4820

QEMU理解与分析系列(11):QEMU内存机制

在物理机上,CPU 对于内存的访问在保护模式下通过分段分页的形式实现。在该模式下,CPU 访问时使用的是虚拟地址,通过 MMU 映射到物理地址,将虚拟地址转换为物理地址才能访问实际的物理内存。同样的,虚拟机模拟的物理机同样需要有上述的机制,也需要有从虚拟地址到物理地址的转换。这里需要注意,模拟的物理机的物理地址本质上是 qemu 的虚拟地址。

swh547的博客 49

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

android apk安装代码,Android 8.0安装apk的实例代码

android 8.0安装apk需要请求未知来源权限//xml配置/*** 检测版本8.0*/public void checkOreo() {if (SdkVersionUtils.hasOreo()) {//8.0//判断是否可以直接安装boolean canInstall = getPackageManager().canRequestPackageInstalls();if (canIns...

weixin_28956461的博客 644

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

android 8.0安装apk失败

android 8.0安装apk除了要配置provider &lt;provider android:name="android.support.v4.content.FileProvider" android:authorities="包名.fileprovider" android:grantUriPermissions="true" android:expor...

Zone_yan的专栏 576

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

安卓8.0应用内apk安装更新问题

谷歌开发大会后安卓8.0发布,刚好自己提前在花粉俱乐部发起的新系统体验申请,于是将现在的华为mate9升级到android O,调试项目的时候发现应用内安装apk出了问题,打开应用的时候屏幕只是一闪,不能正常安装。       在安卓7.0下安装apk使用fileprovider打开应用管理器的方法可以参考网上资料。查阅资料发现安卓8.0安装apk需要新的权限,具体如下在AndroidManife

天。朝程序猿的专栏 5604

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

http://www.czhzero.com/2016/12/21/how-to-install-apk-on-Android7-0/   1、7.0系统使用FileProvider进行apk安装 Android系统升级到7.0之后,安全性提高了不少,过去我们通常是使用这样的代码进行apk的安装操作。 Intent intent = new Intent(Intent.ACTIO...

wusj的博客 2783

android+8.0代码安装包,Android 8.0安装apk的实例代码

android 8.0安装apk需要请求未知来源权限//xml配置/*** 检测版本8.0*/public void checkOreo() {if (SdkVersionUtils.hasOreo()) {//8.0//判断是否可以直接安装boolean canInstall = getPackageManager().canRequestPackageInstalls();if (canIns...

weixin_42584586的博客 388

android 8.0系统调用安装APK

添加权限 <!--安卓8.0打开apk安装更新--> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/> 调用安装前先判断系统版本,8.0以上系统提示开启 “允许未知来源权限”,无此权限时 一般系统会自动弹框提示开启 private void openFile(fin...

xdy1120的博客 3413

android 代码安装,Android应用开发之Android 8.0安装apk的实例代码

本文将带你了解Android应用开发Android 8.0安装apk的实例代码,希望本文对大家学Android有所帮助。android 8.0安装apk需要请求未知来源权限//xml配置/*** 检测版本8.0*/public void checkOreo() {if (SdkVersionUtils.hasOreo()) {//8.0//判断是否可以直接安装boolean canInstal...

weixin_36150355的博客 288

Android8.0 安装apk

https://blog.csdn.net/m18860232520/article/details/78852832/ /** * 判断是否是8.0,8.0需要处理未知应用来源权限问题,否则直接安装 */ private void checkIsAndroidO() { LogUtil.d("getPackageManager:"+filePath); if (Build...

zhaokai621的博客 572

Android 7.0/8.0 安装APK时解析包错误问题

在android7.0上 private void installApk(File file) { Intent intent = new Intent(Intent.ACTION_VIEW); // 将此段代码移到此,可正常安装 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Uri...

weixin_33913377的博客 1740

Android 8.0更新apk无法调起系统安装问题

Android 8.0更新apk无法调起系统安装问题在AndroidManifest的文件下 添加&lt;uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /&gt;

PXB112的博客 2808
上一篇: 求丑数(判断一个整数是否是丑数)
下一篇: Android monkey 命令详解
github_2011
博客等级 码龄10年 116粉丝 56原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值