Android6.0-14的兼容性

1.Android 6.0

     ①新增运行时权限,危险权限需要动态申请

     ②删除了对 Apache HTTP 客户端的支持

   解决方法:必须在build.gradle文件中声明以下编译时依赖项

        android {

        useLibrary 'org.apache.http.legacy'

        }

2.Android 8.0

  ①允许安装未知来源应用,需要在 AndroidManifest.xml 中声明 REQUEST_INSTALL_PACKAGES 权限

       ②Android8.0取消隐式广播移除掉了所有的隐式广播(即清单文件中注册的广播)需要使用显示广播进行注册(即代码注册)

       通知消息需要设置通知渠道才可显示,如下:

   //只需要将渠道加进去,并且在NotificationCompat.Build中加入渠道id

  //只需要将渠道加进去,并且在NotificationCompat.Build中加入渠道id
NotificationManager systemService = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.O){
NotificationChannel notificationChannel = new NotificationChannel("001", "xxx", NotificationManager.IMPORTANCE_MAX);
systemService.createNotificationChannel(notificationChannel);
mBuilder = new NotificationCompat.Builder(this, "001");
}else {
mBuilder = new NotificationCompat.Builder(this);
}
Notification build = mBuilder.setContentTitle("标题").setContentText("内容").setWhen(System.currentTimeMillis()).setSmallIcon(R.mipmap.ic_launcher).build();
systemService.notify(1,build);

         ④使用startService开启service闪退,需要调用startForegroundService方法启动服务

3.Android 9.0

        ①限制了明文流量(即HTTP接口)的网络请求,需要使用使用HTTPS接口

  解决方法:

方式一:在Application属性中添加如下配置:
<application  android:usesCleartextTraffic="true">
方式二:在res目录下新建xml文件夹,并创建network_security_config.xml文件,内容如下:
 <network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>
之后在Application属性中配置 :
<application android:networkSecurityConfig="@xml/network_security_config">

      ②彻底废弃Apache HTTP库,如果想要继续使用,需要在清单文件中添加如下配置:

<application>

<uses-library android:name="org.apache.http.legacy" android:required="false"/>

</application>

      ③访问电话号码,需要申请 READ_CALL_LOG

      ④调用startForegroundService(),需要FOREGROUND_SERVICE权限

      ⑤不允许多进程使用同一目录webview        

解决办法:在app的application类OnCreate方法中加入代码

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {

            val processName = getProcessName()

            if (!"应用包名".equals(processName)) {

                WebView.setDataDirectorySuffix(processName)

            }

     }

4.android 10

    ①引入沙盒存储机制,不需要存储权限

    ②新增加了后台定位权限:ACCESS_BACKGROUND_LOCATION

5.Android 11

     ①查询已安装的应用需要在清单文件中配置

解决办法:需要在应用的清单文件中添加 <queries> 元素,在 <queries> 元素中,你可以按软件包名称、intent 签名或提供程序授权指定软件包。

     ②支持并发使用多个摄像头

     ③更改了读取电话号码权限,需要动态获取READ_PHONE_NUMBERS权限

        TelecomManager类中的 getLine1Number()方法

        TelecomManager类中的 getMsisdn()方法

      自定义Toast被屏蔽

  前后台位置信息访问权限声明 location 的前台服务类型ACCESS_BACKGROUND_LOCATION)

6.Android 12 

     ①大致位置权限(用户可以要求您的应用仅获取大致位置信息。)

        粗略位置: 精确到2平方公里的位置值,请求 ACCESS_COARSE_LOCATION 权限可以获得。

         精确位置: 精确到50米以内的位置值,请求 ACCESS_FINE_LOCATION 权限可以获得

     ②应用休眠(应用几个月没有启动,系统会自动重置授予的所有权限并将您的应用置于休眠状态)

     ③状态栏下拉菜单中新增麦克风和摄像头切换开关

     ④前台服务启动限制

     ⑤精确的闹钟权限

7.Android 13

     ①新增运行时通知权限:android.permission.POST_NOTIFICATIONS

     ②在后台使用身体传感器需要新的权限BODY_SENSORS_BACKGROUND

     ③细化媒体权限

        

     ④新增了使用精确闹钟的权限USE_EXACT_ALARM

8.Android 14

    ① 限制隐式intent(隐式intent仅传递给exported的组件,显式 intent 传送到未导出的组件 带包名的去跳转)

<activity android:name=".AppActivity"

          android:exported="false"> //false 不可导出 true可导出

    <intent-filter>

        <action android:name="com.xxx.xx_ACTION" />

        <category android:name="android.intent.category.DEFAULT" />

    </intent-filter>

</activity>

//跳转不可导出,需要设置包名

Intent explicitIntent =new Intent("com.xxx.xx_ACTION")

explicitIntent.setPackage(context.getPackageName());

context.startActivity(explicitIntent);

    ②在运行时注册的广播接收器必须指定导出行为(动态注册广播接收器,需要设置标记 RECEIVER_EXPORTED 或 RECEIVER_NOT_EXPORTED)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/433777.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

15 实战:Kaggle房价预测 + 课程竞赛:加州2020年房价预测【李沐动手学深度学习课程笔记】

15 实战&#xff1a;Kaggle房价预测 课程竞赛&#xff1a;加州2020年房价预测【李沐动手学深度学习课程笔记】https://zhuanlan.zhihu.com/p/685343754 写在前面&#xff1a;这里格式很乱&#xff0c;代码直接去知乎copy 1 实战Kaggle比赛&#xff1a;预测房价 1.1 实现几个函…

C#实现选择排序算法

以下是使用C#实现选择排序算法的示例代码&#xff1a; using System;class SelectionSort {static void Main(string[] args){int[] arr { 64, 25, 12, 22, 11 };Console.WriteLine("排序前&#xff1a;");PrintArray(arr);SelectionSortAlgorithm(arr);Console.Wr…

STM32CubeMX学习笔记12 ---低功耗模式

在实际使用中很多产品都需要考虑低功耗的问题&#xff0c;STM32F10X提供了三种低功耗模式&#xff1a;睡眠模式&#xff08;Sleep mode&#xff09;、停机模式&#xff08;Stop mode&#xff09;和待机模式&#xff08;Standby mode&#xff09;。这些低功耗模式可以有效减少系…

【AI视野·今日NLP 自然语言处理论文速览 第八十三期】Wed, 6 Mar 2024

AI视野今日CS.NLP 自然语言处理论文速览 Wed, 6 Mar 2024 Totally 74 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers MAGID: An Automated Pipeline for Generating Synthetic Multi-modal Datasets Authors Hossein Aboutalebi, …

Vue-04

Vue 指令 指令补充 指令修饰符&#xff1a;通过"."指明一些指令后缀&#xff0c;不同后缀封装了不同的处理操作 → 简化代码 按键修饰符 keyup.enter → 键盘回车监听 在input中使用keyup.enter&#xff0c;这个时候按enter键也能实现添加&#xff0c;和点击按钮实…

Redis的散列插槽及故障转移

散列插槽 散列插槽原理类似于一个哈希散列表&#xff0c;通过哈希算法来映射插槽&#xff0c;并为redis节点分配插槽区间&#xff0c;插槽的所有范围是0~16383 数据key不是与节点绑定&#xff0c;而是与插槽绑定。redis会根据key的有效部分计算插槽值&#xff0c;分两种情况&a…

第十三届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组 统计子矩阵

#include<iostream> #include<algorithm> #include<cstring> #include<string> #include<vector> #include<queue>using namespace std;int cnt,temp; int n,m,K; int a[505][505]; int pre[505][505];//二维前缀和void sol() {cin>>…

【Linux】gcc升级13.2.0

错误信息 g: error: unrecognized command line option ‘-stdgnu14’ -stdc14需要g5.2以上&#xff0c;而centos默认的g只有4.8.5&#xff0c;所以&#xff0c;要做的事情&#xff0c;是升级g 下载gcc 官网下载: https://ftp.gnu.org/gnu/gcc/wget https://ftp.gnu.org/gnu/…

liunx自动构建化工具make/makefile

liunx自动化构建工具 依赖关系和依赖方法makefile 文件格式 第一个项目 进度条牛刀小试 倒计时简单模版 makefile 的多文件编程 依赖关系和依赖方法 依赖关系&#xff1a;依赖关系是文件之间的关系。 依赖方法&#xff1a;依赖方法是文件之间相互作用的方法。通过方法产生关系…

java网络编程 02 socket

01.socket定义 02.TCP编程 import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket;public class clientSocket {public static void main(String[] args) throws IOException {Socket socket new Socket(Inet…

HTTP协议与HTTPS协议

HTTP与*HTTPS HTTP协议HTTP请求的通信过程HTTP优点 HTTPS协议HTTPS优点SSL/TLS的工作原理?*公钥传递的信赖&#xff1f;*通过中间CA机构传输 HTTP协议 HTTP协议是一个无状态的协议&#xff0c; 服务器不维护任何有关客户端之前所发请求的消息。 是一种懒政&#xff0c;有状态协…

基于selenium自动化索引点击

小鹅快速刷题&#xff0c;根据selenium和xpath定位题干&#xff0c;使用模糊匹配fuzzywuzzy库查找题目匹配答案&#xff0c;自动点击&#xff0c;完成后更新题库 先导入基本包&#xff0c;准备好题库 from fuzzywuzzy import process from selenium import webdriver import …

9、Linux-安装JDK、Tomcat和MySql

目录 一、安装JDK 1、传输JDK文件&#xff08;.tar.gz&#xff09; 2、解压 3、备份环境变量 4、配置环境变量 5、重新加载环境变量 6、验证&#xff08;java -version&#xff09; 二、安装Tomcat 1、传输文件&#xff0c;解压到/usr/local 2、进入Tomcat的bin目录 …

如何从产品的角度做好内容营销?媒介盒子支招

内容运营就是指将生产传播内容并进行重组&#xff0c;去满足用户的内容消费需求&#xff0c;想要提高内容运营的效果&#xff0c;媒介盒子认为可以从产品出发&#xff0c;将内容运营与品牌产品相结合。那么应该怎么做呢&#xff1f;接下来就让媒介盒子告诉你。 一、 场景化内容…

Android岗面试,android内存优化面试题

前言 曾听过很多人说Android学习很简单&#xff0c;做个App就上手了&#xff0c;工作机会多&#xff0c;毕业后也比较容易找工作。这种观点可能是很多Android开发者最开始入行的原因之一。 在工作初期&#xff0c;工作主要是按照业务需求实现App页面的功能&#xff0c;按照设…

太惊艳了!多微信管理利器,让你事半功倍!

作为现代社交媒体的主要平台之一&#xff0c;微信在商务领域中扮演着重要的角色。为了提高我们的工作效率&#xff0c;微信管理系统应运而生。 这个系统可以同时登录多个微信账号&#xff0c;并进行统一管理。除了便捷的登录管理功能外&#xff0c;微信管理系统还提供了许多实…

达梦数据库使用数据库迁移工具弹窗报错“获取模式失败”的解决办法

在使用数据库迁移工具Data Transfer Service时&#xff0c;在下面这个页面点击下一步之后报错“获取模式失败” 为什么会失败呢&#xff1f;我们去看看报错 这里显示系统处于MOUNT状态&#xff0c;这可能是出错的原因。我们去查看数据库状态。 发现是mount状态。 因为mount状态…

薪资18K需要什么水平?来看看97年测试工程师的面试全过程…

我的情况 大概介绍一下个人情况&#xff0c;男&#xff0c;本科&#xff0c;三年多测试工作经验&#xff0c;懂python&#xff0c;会写脚本&#xff0c;会selenium&#xff0c;会性能&#xff0c;然而到今天都没有收到一份offer&#xff01;从年后就开始准备简历&#xff0c;年…

爬虫实战——伯克利新闻【内附超详细教程,你上你也行】

文章目录 发现宝藏一、 目标二、简单分析网页1. 寻找所有新闻2. 分析模块、版面和文章 三、爬取新闻1. 爬取模块2. 爬取版面3. 爬取文章 四、完整代码五、效果展示 发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不…

【Leetcode每日一刷】数组|704. 二分查找、27. 移除元素

力扣每日刷题 一、704. 二分查找1.1、题目1.2、解题思路1.3、代码实现——C1.4、 总结&易错 二、27. 移除元素2.1&#xff1a;题目2.2、解题思路2.3、代码实现——C1.4、 总结&易错 一、704. 二分查找 1.1、题目 704. 二分查找 1.2、解题思路 题型&#xff1a;数组…