Android 8,Android开发经典实战
/**
- 判断是否是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开发经典实战相关推荐
- 【Android】蓝牙开发——经典蓝牙:配对与解除配对 实现配对或连接时不弹出配对框
目录 一.配对方法 二.解除配对方法 三.配对/解除配对结果 四.justwork配对模式下,不弹出配对框 五.pincode配对模式下,不弹出配对框 六.小结 在之前的文章[Android]蓝牙开发 ...
- 蓝牙配对模式 java_【Android】蓝牙开发—— 经典蓝牙配对介绍(Java代码实现演示)附Demo源码...
目录 前言 一.连接&配对方法介绍 二.演示:第一次连接蓝牙设备 & 直接与蓝牙设备建立配对 三.总结 四.补充 五.Demo案例源码地址: 前言 前面两篇文章[Android]蓝 ...
- 【Android】蓝牙开发—— 经典蓝牙配对介绍(Java代码实现演示)附Demo源码
目录 前言 一.连接&配对方法介绍 二.演示:第一次连接蓝牙设备 & 直接与蓝牙设备建立配对 三.总结 四.补充 五.Demo案例源码地址: 前言 前面两篇文章[Android]蓝 ...
- Android笔记---蓝牙开发经典蓝牙和低功耗蓝牙
目录 前言 一般开发步骤 相关API介绍 一.通用API 1.BluetoothAdapter 2.BluetoothDevice 二.经典蓝牙(BT)API 1.BluetoothSocket 2. ...
- Java开发经典实战!java正则表达式匹配字符串替换
零基础如何学习Java? 首先,你要明白一点,Java入门不难! 无论你是从事哪个行业,兴趣一定是最好的老师,也是你学习的动力. 学习方式1:自学 自学模式其实我个人不建议绝大部分的人选择,因为自学是 ...
- 玩转Android之MVVM开发模式实战,炫酷的DataBinding!
原文:http://blog.csdn.net/u012702547/article/details/52077515 ---------------------------------------- ...
- 【Android】蓝牙开发——经典蓝牙配对介绍(通过手机系统蓝牙演示)
目录 一.蓝牙配对介绍 二.蓝牙配对过程 三.蓝牙配对方式展示 一.蓝牙配对介绍 蓝牙规范定义了两种标准配对过程,LMP配对(也称为基于PIN码)和SSP安全简易配对. LMP(Link Manage ...
- Java开发经典实战!java数据结构和算法面试题及答案
美团一面(50分钟左右) 进程和线程 死锁的必要条件 网络,七层协议 TCP和UDP的区别 hashmap 详细讲一下 hashmap底层是如何解决hash冲突的 hashmap和linkedhash ...
- Java开发经典实战!大连java培训机构
前言 在大型系统中,为了减少数据库压力通常会引入缓存机制,一旦引入缓存又很容易造成缓存和数据库数据不一致,导致用户看到的是旧数据. 为了减少数据不一致的情况,更新缓存和数据库的机制显得尤为重要,接下来 ...
最新文章
- 连续数列(总和最大的连续数列)
- 微型计算机分析,微机原理练习题分析
- 现任明教教主共享胖AP与WLC安全配置录像.上半部分
- python输出日志到文件_【已解决】Python中,如何让多个py文件的logging输出到同一个日志log文件...
- 20155303狄惟佳预备作业三Linux学习笔记
- where is application controller bound to application main view
- 使不安全变得更加安全
- python编程的基本方法有哪些_Python编程中常用的基础知识有哪些?
- django请求生命周期
- 并行程序设计模式--Master-Worker模式
- jquery中如何获得$.ajax()事件返回的值
- Trie树---前缀最相似匹配
- Extjs4操作TreeStore处理proxyAjax获取的数据
- 搭建nfs共享存储服务之三客户端配置
- Microsoft caffe cifar实例编译之model的生成
- SpringBoot2.X 单元测试(Junit4.X) 基本配置
- android PDFview加载PDFPDF加水印
- 1024献礼,全栈工程师进击
- 如何降低数字信号和模拟信号间的相互干扰
- 第八十五章 Caché 函数大全 $ZDATETIME 函数