Android5.0和Android6.0适配
gradle配置项
- compileSdkVersion
用哪个 Android SDK 版本编译你的应用。因此我们强烈推荐总是使用最新的 SDK 进行编译。在现有代码上使用新的编译检查可以获得很多好处,避免新弃用的 API ,并且为使用新的 API 做好准备。 - minSdkVersion
是应用可以运行的最低要求,也是各大Android应用商店用来判断用户设备是否可以安装某个应用的标志之一 - targetSdkVersion
targetSdkVersion 是 Android 提供向前兼容的主要依据
targetSdkVersion | < | 平台的API级别 | 向前兼容举个栗子:targetSdkVersion==23(6.0),当前设备Android版本7.0,运行程序时用6.0那一套接口。接口:API接口 |
---|---|---|---|
targetSdkVersion | = | 平台的API级别 | 不启用兼容性 |
targetSdkVersion | > | 平台的API级别 | 举个栗子:targetSdkVersion==23(6.0),当前设备Android版本是 5.0 ,运行程序 用的是5.0那套接口。设备根本到不了6.0 |
是不是意味着targetSdkVersion越低越好?
- 使用低版本API的其中一个不足,显示的效果比较OUT,提供的可用的接口或类比较少
- 高版本API会针对低版本存在的问题进行改进和完善,摈弃一下不用的类或接口,新增一些方法或属性,如果你使用的方法是在某个API被另一个方法代替的话,你可能就得在代码中区分APP是运行在哪个版本的Android系统
- 应用平台对targetSdkVersion有要求
minSdkVersion <= targetSdkVersion <= compileSdkVersion
andorid 5.0 新特性
- Material Design
- 支持64位ART虚拟机。
- Overview 多任务视窗。
- RecyclerView
- 卡片CardView
- Palette是一个可以从图片(Bitmap)中提取颜色的帮助类,可以使UI更加美观,根据图片动态的显示相应的颜色
android 5.0适配
启动服务,不支持隐式调用的问题
解决方案- 使用action调用,必须指定包名启动(判断当前当前系统版本)
- ComponentName 传入包名和类名,必须是完整类名路径。
android5.0 getRunningTasks 和getRunningAppProcesses(仅返回当前应用包名)失效
解决方案- 第一种办法,用 UsageStatsManager,需要权限,且只针对系统应用有效,而且要打开设置页面。
- 第二种,不需要权限,外国的一个开源项目:https://github.com/jaredrummler/AndroidProcesses(Android7.0后不生效)
backgroundTint属性只能在5.0以上的api中调用
解决方案- 我们可以新建一个values-v21文件夹,这个里面声明的属性会在api21以上的机器上优先于values文件夹中执行
Android API 21(5.0)引入了一个Drawable的子类VectorDrawable
解决方案(https://www.jianshu.com/p/0972a0d290e9)minSdkVersion<21:如果想要渲染矢量图的话必须在app模块的build.gralde文件里添加一行代码:
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
在Application或者Activity上加上AppCompateDelegate开启CompatVectorFromResources支持
Button,TextView,应用矢量图,保险的是先把矢量图转为selector,然后selector代替矢量图使用
Android5.0上 WebView中Http和Https混合问题
解决方案if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
WebView cookie 存储问题
public static void syncCookie(String url, String key) {
CookieManager cookieManager = CookieManager.getInstance();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
cookieManager.removeSessionCookies(null);
cookieManager.flush();
} else {
cookieManager.removeSessionCookie();
CookieSyncManager.getInstance().sync();
}
cookieManager.setAcceptCookie(true);
cookieManager.setCookie(url, key);
}
JobScheduler和JobService是安卓在api 21中增加的接口(保活),功能更强的闹钟
Android 6.0 适配及新特性
运行时权限,请务必在运行时检查和请求权限
Normal Premission:普通权限
Dangerous Permission/Group: 危险权限/组
android.permission.READ_CALENDAR允许程序读取用户日历数据
android.permission.WRITE_CALENDAR允许一个程序写入但不读取用户日历数据
android.permission.CAMERA,允许访问摄像头进行拍照
android.permission.READ_CONTACTS允许程序读取用户联系人数据
android.permission.WRITE_CONTACTS允许程序写入但不读取用户联系人数据
android.permission.GET_ACCOUNTS访问一个帐户列表在Accounts Service中
android.permission.ACCESS_FINE_LOCATION允许一个程序访问精良位置(如GPS)
android.permission.ACCESS_COARSE_LOCATION允许一个程序访问CellID或WiFi热点来获取粗略的位置
android.permission.RECORD_AUDIO允许程序录制音频
android.permission.CALL_PHONE允许一个程序初始化一个电话拨号不需通过拨号用户界面需要用户确认
android.permission.READ_PHONE_STATE 访问电话状态
android.permission.READ_CALL_LOG 查看电话日志
android.permission.WRITE_CALL_LOG写入电话日志
android.permission.ADD_VOICEMAIL 允许应用程序添加系统中的语音邮件
android.permission.USE_SIP 允许程序使用SIP视频服务
android.permission.PROCESS_OUTGOING_CALLS 允许应用程序监视、修改、忽略拨出的电话
android.permission.BODY_SENSORS 允许该应用存取监测您身体状况的传感器所收集的数据,例如您的心率
android.permission.SEND_SMS允许程序发送SMS短信
android.permission.RECEIVE_SMS允许程序监控一个将收到短信息,记录或处理
android.permission.READ_SMS允许程序读取短信息
android.permission.RECEIVE_WAP_PUSH允许程序监控将收到WAP PUSH信息
android.permission.RECEIVE_MMS允许一个程序监控将收到MMS彩信,记录或处理
android.permission.WRITE_EXTERNAL_STORAGE 允许程序写入外部存储,如SD卡上写文件
android.permission.READ_EXTERNAL_STORAGE 访问您设备上的照片、媒体内容和文件
取消支持 Apache HTTP
解决方案:
android {
useLibrary 'org.apache.http.legacy'
}BoringSSL
请勿链接到并非 NDK API 组成部分的加密库,如 libcrypto.so 和 libssl.so硬件标识符访问权
- WifiInfo.getMacAddress() 方法和 BluetoothAdapter.getAddress() 方法现在会返回常量值 02:00:00:00:00:00。
- 现在想访问硬件标识,如:WiFi和蓝牙,必须要有 ACCESS_FINE_LOCATION或者ACCESS_COARSE_LOCATION权限
WifiManager.getScanResults()
BluetoothDevice.ACTION_FOUND
BluetoothLeScanner.startScan()
AudioManager类 不再支持直接设置音量或将特定音频流静音
- setStreamSolo() 方法已弃用,您应该改为调用 requestAudioFocus() 方法。
- setStreamMute() 方法也已弃用,请改为调用 adjustStreamVolume() 方法并传入方向值 ADJUST_MUTE 或 ADJUST_UNMUTE
相机服务变更
- 相机服务中共享资源的访问模式已从之前的“先到先得”访问模式更改为高优先级进程优先的访问模式
dlopen failed: "has text relocations"
- 解决方案一:将targetSdkVersion 修改为<23
- 解决方案二: https://wiki.gentoo.org/wiki/Hardened/Textrels_Guide 通过scanelf / objdump定位存在TEXTREL问题的文件, 以及关键代码在文件中的偏移量, 然后根据偏移量对应的特征 (函数名 / hard code的绝对地址等), 定位到代码所在.
- 在mk脚本中, 对LOCAL_CFLAGS, 增加-fPIC参数
电源管理
在原有的电源管理的基础上加入了两种新的状态:- App Standby—应用待机状态
- Doze 系统休眠状态
规范化App Link (应用程序链接)
指纹识别(统一API)
Android5.0和Android6.0适配的更多相关文章
- Android app 在线更新那点事儿(适配Android6.0、7.0、8.0)
一.前言 app在线更新是一个比较常见需求,新版本发布时,用户进入我们的app,就会弹出更新提示框,第一时间更新新版本app.在线更新分为以下几个步骤: 1, 通过接口获取线上版本号,versionC ...
- android6.0 适配的问题——activity销毁的问题
1.最近我去运行我们公司所开发的APP,发现出现很多问题,就是从前一个页面跳到另外一个页面后,前一个页面会被销毁. 正常来说,activity跳转过程是这样: A: 存在intent +setActi ...
- Android教程 -05 Android6.0权限的管理
视频为本篇博客知识的讲解,建议采用超清模式观看, 欢迎点击订阅我的优酷 上篇文章我们讲解了通过隐式意图拨打电话,在AndroidManifest.xml文件中添加了权限 <uses-permis ...
- Android6.0 init 深入分析
之前写过一篇关于android5.0 init的介绍,这篇博客是介绍android6.0init,之前有的代码介绍不详细.而且分析 解析init.rc那块代码也没有结合init.rc介绍. 一. ma ...
- Android6.0以上关于RecyclerView显是不全的问题
Android6.0以上关于RecyclerView显是不全的问题 需求描述 适配的时候发现Android 6.0以上,RecyclerView显示不全,以下是没有问题的.这个时候查看布局文件,可以看 ...
- 高通 NXP NFC(PN547PN548) 移植流程 android6.0
一.驱动部分 首先向NXP 的 fae要android 6.0 bring up的代码,如:NFC_NCIHALx_AR0F.4.3.0_M_NoSE 结构目录如下: 1. 添加驱动文件 高通平台需使 ...
- 说说Android6.0动态申请权限的那些坑
白天在做SDK23版本的适配,遇到了不少坑,现在抽空记下来,以此为戒. 首先要知道哪些坑,就得先了解一些定义和基本使用方式. 那么先介绍一下动态申请的权限分组情况. 下面的权限组是由谷歌官方定义的,目 ...
- 【Android】Android6.0读取通话记录
需求:读取通话记录,然后列表显示,每条记录的数据包括姓名.号码.类型(来电.去电.未接,字体颜色分别为绿.蓝.红),然后长按条目弹出一个列表弹窗,显示[复制号码到拨号盘].[发短信].[打电话]. 先 ...
- imx6 Android6.0.1 init.rc解析
1. 概述 1.1 概述 之前分析过android5的init.rc,不过还是不够仔细,现在来看看android6的,多的就不写了,只写关键点 忘记一些基本概念可以先看看之前的笔记: Android5 ...
随机推荐
- 使用Razor表达式 使用条件语句 来自 精通ASP-NET-MVC-5-弗瑞曼
- Isx个人第4次作业—Alpha项目测试
标题 内容 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/GeographicInformationScience 这个作业要求在哪里 https:// ...
- Kafka系列1:Kafka概况
Kafka系列1:Kafka概况 Kafka是当前分布式系统中最流行的消息中间件之一,凭借着其高吞吐量的设计,在日志收集系统和消息系统的应用场景中深得开发者喜爱.本篇就聊聊Kafka相关的一些知识点. ...
- H5新增特性
1.pattern:写正则,但是需要和form表单连着用 2.WebSocket "网络套接字", 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议.在 W ...
- spring @Scheduled注解 定时任务 详解
scheduled的使用注解的方式进行调度 先要配置spring.xml xmlns:task="http://www.springframework.org/schema/task&quo ...
- django用户认证的session的应用
from django.shortcuts import render,redirect def login(request): if request.method=='GET': return re ...
- 【干货】国外程序员整理的 C++ 资源大全–日常工作,我觉得用处确实很大,所以分享
考到群里的纯技术文章比较少,发一篇,其实不限于C++可用,这些东西 百度文库链接10 百度云下载15 我个人感觉很有用的,因为其中有些东西时 头儿让我在项目里用的 关于 C++ 框架.库和资源的一些 ...
- webdriver的常用方法
webdriver的常用方法 click():点击元素 clear():清除文本 send_keys(value):模拟按键输入 # -*- coding:utf-8 -*- from seleniu ...
- ncbi-blast 本地安装
详见:http://blog.shenwei.me/local-blast-installation/ Linux系统中NCBI BLAST+本地化教程 本文面向初学者(最好还是懂得基本的linux使 ...
- Codeforces_723_A
http://codeforces.com/problemset/problem/723/A 取中间那个数就可以了,答案为最大值减最小值. #include<iostream> #incl ...