/**

  • 判断是否是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 操作将用户引导至 安装未知应用界面

![](https://img-blog.csdn.net/20171121113547250?watermark/2/text/aHR0cDovL2Jsb2cuY3Nk

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

bi5uZXQvZ2l0aHViXzIwMTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)

用户点击我们的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 8,Android开发经典实战相关推荐

  1. 【Android】蓝牙开发——经典蓝牙:配对与解除配对 实现配对或连接时不弹出配对框

    目录 一.配对方法 二.解除配对方法 三.配对/解除配对结果 四.justwork配对模式下,不弹出配对框 五.pincode配对模式下,不弹出配对框 六.小结 在之前的文章[Android]蓝牙开发 ...

  2. 蓝牙配对模式 java_【Android】蓝牙开发—— 经典蓝牙配对介绍(Java代码实现演示)附Demo源码...

    目录 前言 一.连接&配对方法介绍 二.演示:第一次连接蓝牙设备  &  直接与蓝牙设备建立配对 三.总结 四.补充 五.Demo案例源码地址: 前言 前面两篇文章[Android]蓝 ...

  3. 【Android】蓝牙开发—— 经典蓝牙配对介绍(Java代码实现演示)附Demo源码

    目录 前言 一.连接&配对方法介绍 二.演示:第一次连接蓝牙设备  &  直接与蓝牙设备建立配对 三.总结 四.补充 五.Demo案例源码地址: 前言 前面两篇文章[Android]蓝 ...

  4. Android笔记---蓝牙开发经典蓝牙和低功耗蓝牙

    目录 前言 一般开发步骤 相关API介绍 一.通用API 1.BluetoothAdapter 2.BluetoothDevice 二.经典蓝牙(BT)API 1.BluetoothSocket 2. ...

  5. Java开发经典实战!java正则表达式匹配字符串替换

    零基础如何学习Java? 首先,你要明白一点,Java入门不难! 无论你是从事哪个行业,兴趣一定是最好的老师,也是你学习的动力. 学习方式1:自学 自学模式其实我个人不建议绝大部分的人选择,因为自学是 ...

  6. 玩转Android之MVVM开发模式实战,炫酷的DataBinding!

    原文:http://blog.csdn.net/u012702547/article/details/52077515 ---------------------------------------- ...

  7. 【Android】蓝牙开发——经典蓝牙配对介绍(通过手机系统蓝牙演示)

    目录 一.蓝牙配对介绍 二.蓝牙配对过程 三.蓝牙配对方式展示 一.蓝牙配对介绍 蓝牙规范定义了两种标准配对过程,LMP配对(也称为基于PIN码)和SSP安全简易配对. LMP(Link Manage ...

  8. Java开发经典实战!java数据结构和算法面试题及答案

    美团一面(50分钟左右) 进程和线程 死锁的必要条件 网络,七层协议 TCP和UDP的区别 hashmap 详细讲一下 hashmap底层是如何解决hash冲突的 hashmap和linkedhash ...

  9. Java开发经典实战!大连java培训机构

    前言 在大型系统中,为了减少数据库压力通常会引入缓存机制,一旦引入缓存又很容易造成缓存和数据库数据不一致,导致用户看到的是旧数据. 为了减少数据不一致的情况,更新缓存和数据库的机制显得尤为重要,接下来 ...

最新文章

  1. 连续数列(总和最大的连续数列)
  2. 微型计算机分析,微机原理练习题分析
  3. 现任明教教主共享胖AP与WLC安全配置录像.上半部分
  4. python输出日志到文件_【已解决】Python中,如何让多个py文件的logging输出到同一个日志log文件...
  5. 20155303狄惟佳预备作业三Linux学习笔记
  6. where is application controller bound to application main view
  7. 使不安全变得更加安全
  8. python编程的基本方法有哪些_Python编程中常用的基础知识有哪些?
  9. django请求生命周期
  10. 并行程序设计模式--Master-Worker模式
  11. jquery中如何获得$.ajax()事件返回的值
  12. Trie树---前缀最相似匹配
  13. Extjs4操作TreeStore处理proxyAjax获取的数据
  14. 搭建nfs共享存储服务之三客户端配置
  15. Microsoft caffe cifar实例编译之model的生成
  16. SpringBoot2.X 单元测试(Junit4.X) 基本配置
  17. android PDFview加载PDFPDF加水印
  18. 1024献礼,全栈工程师进击
  19. 如何降低数字信号和模拟信号间的相互干扰
  20. 第八十五章 Caché 函数大全 $ZDATETIME 函数

热门文章

  1. 来自全国各地的65位高校教师接龙晒工资,供参考
  2. 南开大学计算机党支部书记,程莉莉
  3. 访问者模式Visitor
  4. Python3 print pprint
  5. 2021-08-23-Nginx安装与部署项目
  6. 共轭方式怎么判断_有机化学中共轭体系的类型怎么判断
  7. Java打开jnlp
  8. Flutter Container去掉边框
  9. 【BZOJ 1305】[CQOI2009]dance跳舞
  10. 在线 xml转java对象_XML转Java实体对象