Android版本判断相关方法:
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.N){...}
@TargetApi(Build.VERSION_CODES.N)
public void function(){}
几个重要版本:
Android版本 | API版本 | 代号 |
---|---|---|
4.4 | 19 | KITKAT |
5.0 | 21 | LOLLIPOP |
6.0 | 23 | M |
7.0 | 24 | N |
8.0 | 26 | O |
9.0 | 28 | P |
10.0 | 29 | Q |
Android 6.0:
1.动态申请危险权限
动态申请危险权限,这里在授权一个危险权限的时候,会将同组的危险权限一并授权,这一点在Android 8.0有改动,具体参考权限管理
2.状态栏黑色图标
状态栏开放设置黑色图标的接口,参考状态栏设置
Android 7.0:
1.引入另一种apk签名方式:
引入APK Signature Scheme v2,参考两种APK签名方式
2.后台优化
后台优化:限制了三个隐式广播静态注册无效,如CONNECTIVITY_ACTION
,ACTION_NEW_PICTURE
和ACTION_NEW_VIDEO
,目的是防止有些App通过静态广播自动唤醒
Android 8.0:
1.自适应App图标
2.PHONE中增加两个权限
ANSWER_PHONE_CALLS
允许接电话,READ_PHONE_NUMBERS
允许读取设备中的电话号码
3.前台任务可以创建前后台任务,后台服务创建后台或前台任务被禁止
4.修改了Notifation的接口
开始使用Channel来管理Notification,参考Notification
5.后台优化:
进一步限制了一些隐式广播的静态注册,一些隐式广播的静态注册仍可以使用
Android 9.0:
1.刘海屏幕:
加入刘海屏适配,参考刘海屏
2.前台服务权限:
前台服务需要在manifest文件添加FOREGROUND_SERVICE
权限:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
3.默认禁止http连接
只支持https连接,如果要使用Http连接,需要在res下的xml目录新建一个文件
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
然后在manifest的application节点加入:
android:networkSecurityConfig="@xml/xxx"
Android 10.0:
1.分区存储
获取外部文件时通过Context.getExternalFilesDir()得到应用的私有目录,这个目录下的文件会随着应用一起被删除,访问这个文件夹下的文件不再需要申请存储读写权限;且Environment.getExternalStorageState()将无法访问外部文件
如果想要文件不随应用一起被删除,则需要通过MediaStore来实现,同时需要申请存储权限;
2.增加针对后台定位的权限
增加了新的权限ACCESS_BACKGROUND_LOCATION
,表示应用程序是否可以在处于后台运行时使用定位
3.设备唯一标识符
通过WifiInfo.getMacAddress()获取的Mac地址变为了固定默认值;
此外IMEI(国际移动设备身份码)和UUID(唯一设备表示码)都只能获取到null
Android Q 获取设备唯一ID的做法:
待填坑
4.后台启动Activity
Android Q只允许在应用前台启动Activity,想要在一个应用启动另外一个应用的Activity,需要创建通知等待用户点击,这样做可以减少用户操作中断
5.非SDK接口
非SDK接口是API没有对外提供的接口如private接口,通过反射等方式调用了非SDK接口的行为会带来兼容性问题;