Andorid各版本主要更变

编程入门 行业动态 更新时间:2024-10-26 20:27:59

Andorid<a href=https://www.elefans.com/category/jswz/34/1768071.html style=各版本主要更变"/>

Andorid各版本主要更变

andorid各版本主要更变
参考自:
6.0新特性(棉花糖)
参考自:.0-changes.html?hl=zh-cn
1.运行时权限
对于以android6.0(API级别23)或更高版本为目标平台的应用,请务必在运行时检查和请求权限。要确认您的应用是否已被授予权限,请调用新增的checkSelfPermission()方法,要请求权限,请调用新增的requestPermission()方法。
2.取消支持ApacheHttp客户端
android6.0版移除了对apacheHttp客户端的支持,如果您的应用使用该客户端,并以android2.3(api级别9)或更高版本为目标平台,请改用HttpURLConnection类,次api效率
更高,因为它可以通过透明压缩和响应缓存减少网络使用,并可最大限度降低耗电量,要继续使用apacheHttp api,您必须现在build.gradle文件中声明一下编译时依赖项:
android {
    useLibrary 'org.apache.http.legacy'
}
7.0新特性(牛轧糖)
参考自:.0-changes?hl=zh-cn
1.低电耗模式(未插接电源且屏幕熄灭的情况下,降低cpu和网络活动)
2.系统权限的更改(为提高私有目录安全性,使用file uri访问私有目录,改用content uri)
8.0新特性(奥利奥)
参考自:
1.后台执行限制
android8.0为提高电池续航时间而引入的变更之一是,当您的应用进入已缓存状态时,如果没有活动的组件,系统将解除应用所具有的所有唤醒锁。此外,为提高设备性能,系统会限制
未在前台运行的应用的某些行为。
2.android后台位置限制
为节约电池电量,保持良好的用户体验和确保系统健康运行,在运行android8.0的设备上使用后台应用时,降低了后台应用接收位置更新的频率。
3.通知渠道-notification channels(作用:对通知进行分类控制)
4.运行时权限
在android8.0之前,如果应用在运行时请求权限并且被授予该权限,系统会错误的将属于同一权限组并且在清单中注册的其它权限也一起授予应用,对于android8.0的应用,此行为已被
纠正。系统只会授予应用明确请求的权限。然而,一旦用户为应用授予某个权限,则所有后续对该权限组中权限的请求都将被自动批准。
9.0新特性(派)
参考自:
1.异型屏适配(刘海屏,水滴屏,挖孔屏等)
在android9.0中官方提供了DisplayCutout类,可以确定刘海区域的位置。
2.前台服务
android9.0要求创建一个前台服务需要请求FOREGROUND_SERVICE权限,否则系统会引发SecurityException。
3.启动activity
不能在非activity环境中启动activity,否则会崩溃,一般用在推送消息跳转页面场景,解决方法,在intent中添加标志:FLAG_ACTIVITY_NEW_TASK
4.http限制明文请求
在9.0中默认情况下启用网络传输层安全协议(TLS),默认情况下已停用明文支持。也就是不允许使用http请求,要求使用https。
5.apacheHttp客户端弃用
如想使用:添加<uses-library android:name="org.apache.http.legacy" android:required="false"/>
10.0新特性
参考自:
1.scoped storage(分区存储)
在android10之前的版本上,我们在做文件的操作时都会申请存储空间的读写权限,但是这些权限安全被滥用,造成的问题就是手机的存储空间中充斥着大量不明作用的文件,并且应用写在
后也没有删除掉。为了解决这个问题,android10中引入了scoped storage的概念,通过添加外部存储访问限制来实现更好的文件管理。
*内部存储:/data目录。一般我们使用getFilesDir()或getCacheDir()方法获取本应用的内部存储路径,读写该路径下的文件不需要申请存储空间读写权限,且卸载时应用会自动删除。
*外部存储:/storage或/mnt目录。一般我们使用getExternalStorageDirectory()方法获取的路径来存取文件。
android10.0中外部存储分为了三个部分:
*特定目录,使用getExternalFilesDir()或getExternalCacheDir()方法访问。无须权限,且卸载应用时会自动删除。
*照片、视频、音频这类媒体文件。使用MediaStore访问,访问其他应用的媒体时需要READ_EXTERNAL_STORAGE权限。
*其他目录,使用存储访问框架SAF(Storage Access Framwork)
2.权限变更
android10引入了ACCESS_BACKGROUND_LOCATION权限(危险权限)。
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
在android10的设备上,如果你的应用targetSdkVersion<29,则在请求ACCESS_FIND_LOCATION或ACCESS_COARSE_LOCATION权限时,系统会自动同时请求ACCESS_BACKGROUND_LOCATION。
在请求弹框中,选择“始终允许”表示同意后获取位置信息,选择“仅在应用使用过程中允许”或“拒绝”选项表示拒绝授权。
如果你的应用的targetSdkVersion>=29,这请求ACCESS_FIND_LOCATION或ACCESS_COARSE_LOCATION权限表示在前台时拥有访问设备位置信息的权限,在请求弹框中,选择“始终允许”表示
前后台都可以获取位置信息,选择“仅在应用使用过程中允许“只表示拥有前台的权限。
3.后台启动activity的限制
简单解释就是应用处于后台时,无法启动activity。比如点开一个应用会进入启动页或者广告页,一般会有几秒的延时在跳转至首页。如果这期间你推到后台,那么你将无法看到跳转过程。而在
之前的版本中,会强制弹出页面至前台。
11.0新特性
参考自:
1.存储机制更新
*scoped storage(分区存储):具体适配方法和android10适配攻略中没有太大区别。不过需要注意的是,应用targetSdkVersion>=30,强制执行分区存储机制。
2.权限变化
*单次权限授权
从android11开始,每当应用请求与位置信息、麦克风或摄像头相关的权限时,面向用户的权限对话框会包含仅限这一项选项。如果用户在对话框中选择此项,系统会向应用授予临时的单次授权。
*请求位置权限
这部分在android10的适配有过调整,当时规则如下:
请求ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION权限表示在前台时拥有访问设备位置信息的权限。在请求弹框中,选择“始终允许”表示前后台都可以获取位置信息,选择“仅在应用
使用过程中允许“只表示拥有前台的权限。
在android11中,请求弹框中取消了“始终允许”这一选项。也就是说默认不会授予你后台访问设备位置信息的权限。如果尝试请求ACCESS_BACKGROUND_LOCATION权限的同时请求任何其它权限,
系统会抛出异常,不会向应用授予其中的任一权限。
官方给出的适配建议及原因如下:
建议应用对位置权限执行递增请求,先请求前台位置信息访问权限,再请求后台位置信息访问权限。执行递增请求可以为用户提供更大的控制权和透明度,因为他们可以更好地了解应用中的哪些功能
需要后台位置信息访问权限。
3.软件包可见性
*软件包可见性是android11上提升系统隐私安全的一个新特性。它的作用是限制app随意获取其他app的信息和安装状态。避免病毒软件、间谍软件应用,引发网络钓鱼、用户安装信息泄漏等安全事件。
*解决方法:在AndroidManifest.xml中添加queries元素,里面添加需要可见的应用包名。
<manifest package="com.example.app">
    <queries>
        <package android:name="com.tencent.mm" /> <- 指定微信包名
    </queries>
    ...
</manifest>
4.前台服务类型
android10中,在前台服务访问位置信息,需要在对应的service中添加location服务类型。同样的,在android11中,在前台服务访问摄像头或麦克风,需要在对应的service中添加camera或
microphone服务类型。
<manifest>
    ...
   <service
       android:name="MyService"
       android:foregroundServiceType="microphone|camera" />
</manifest>
这一限制的变更,是的程序无法在后台启动服务访问摄像头和麦克风。如需使用,只能是前台开启前台服务。除非有如下情况:
*服务由系统组件启动
*服务是通过小部件启动。
*服务是通过与通知交互启动的。
5.权限自动重置
*如果应用以android11或更高版本为目标平台并且数月未使用,系统会通过自动重置用户已授予应用的运行时敏感权限来保护用户数据。可通过以下代码引导用户去关闭。
public void checkAutoRevokePermission(Context context) {
    // 判断是否开启
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R &&
            !context.getPackageManager().isAutoRevokeWhitelisted()) {
        // 跳转设置页
        Intent intent = new Intent(Intent.ACTION_AUTO_REVOKE_PERMISSIONS);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setData(Uri.fromParts("package", context.getPackageName(), null));
        context.startActivity(intent);
    }
}
6.apk签名
android11为目标平台的应用,仅通过v1签名的应用无法在android11的设备上安装或更新。必须使用v2或更高版本进行签名。同时android11添加了对apk签名方案v4的支持。
 

更多推荐

Andorid各版本主要更变

本文发布于:2024-02-05 08:59:52,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1673965.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:各版   Andorid

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!