Android 各版本适配

894 阅读4分钟

developer.android.com/about/versi…

android 6 M (23)

1.运行时权限动态申请

android 7 N(24)

1.禁止向你的应用外公开 file:// URI,若要共享文件,使用FileProvider类

2.画中画模式

android 8 O(26)

1. 引入了通知渠道,

2. 不允许后台应用启动后台服务,需要通过startForegroundService()指定为前台服务,应用有五秒的时间来调用该 Service 的 startForeground() 方法以显示可见通知。

3. Android 后台位置限制

4. 悬浮窗限制 SYSTEM_ALERT_WINDOW

android 9 P(28)

1.网络请求中,要求使用https

2.刘海屏API支持

android 10 Q(29)

1.分区存储

2.限制后台应用访问位置权限:ACCESS_BACKGROUND_LOCATION 权限。

3.限制后台启动Activity

4.访问某些 WLAN、WLAN 感知和蓝牙扫描方法需要获得精确位置权限:ACCESS_FINE_LOCATION

Build. getSerial()  

TelephonyManager. getImei() getDeviceId() getMeid() getSimSerialNumber() getSubscriberId()

5.对访问不可重置的设备标识符实施了限制:READ_PRIVILEGED_PHONE_STATE

android 11 R(30)

1.强制执行分区存储机制

2.单独请求在后台访问位置信息,如果您同时请求在前台访问位置信息的权限和在后台访问位置信息的权限,系统不会向您的应用授予其中的任一权限

3.软件包可见性 

查询所有应用及与之交互:需要 QUERY_ALL_PACKAGES 权限

与单个应用交互:与单个应用交互:

<manifest package="com.example.suite.enterprise">
    <queries>
        <provider android:authorities="com.example.settings.files" />
    </queries>
    ...
</manifest>

4.前台服务访问位置/摄像头/麦克风

如果您的应用以 Android 11 或更高版本为目标平台,且在前台服务中访问摄像头或麦克风,则必须添加前台服务类型 camera 和 microphone。

Notification notification = ...;
Service.startForeground(notification, FOREGROUND_SERVICE_TYPE_LOCATION);

或者:<manifest>
    ...
    <service ... android:foregroundServiceType="microphone|camera" />
</manifest>

如果您的应用在后台运行时启动了某项前台服务,则该前台服务无法访问麦克风或摄像头

5..获取“所有文件访问权限”(其他应用私有文件除外): ● 声明 MANAGE_EXTERNAL_STORAGE 权限。 ● 使用 ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION intent 操作将用户引导至一个系统设置页面,在该页面上,用户可以为您的应用启用以下选项:授予所有文件的管理权限。

6.targetsdk >= 30 软件包必须使用 v2签名:developer.android.com/about/versi…

android 12 S(31)

1.android:exported

在target到Android12之后,所有设置了intent filters的activity、services、broadcast receivers都需要设置 android:exported ,否则会导致编译异常。

2.PendingIntent mutability

在target到Android12之后,PendingIntent创建需要指定可变性FLAG_IMMUTABLE 或者 FLAG_MUTABLE。

3.应用在target到Android12之后,如果应用在后台启用前台服务,那么就会报ForegroundServiceStartNotAllowedException。

4.在target到Android12之后,查找蓝牙设备需要添加 BLUETOOTH_SCAN 权限,与匹配的蓝牙设备传输数据需要获取BLUETOOTH_CONNECT 权限。

android 13 S(33)

1.前台服务 (FGS) 任务管理器

2.JobScheduler 改进预提取作业处理

利用 JobScheduler,应用可使用 JobInfo.Builder.setPrefetch() 将特定作业标记为“预提取”作业,这意味着,理想情况下这些作业应该在应用下一次启动前提前一点运行,以提升用户体验

3.通知的运行时权限

Android 13(API 级别 33)引入了运行时通知权限POST_NOTIFICATIONS

4.从剪贴板中隐藏敏感内容

5.intent 过滤器会屏蔽不匹配的 intent

6.通知权限会影响前台服务的显示

7.细化的媒体权限

如果您的应用以 Android 13 或更高版本为目标平台,并且需要访问其他应用已经创建的媒体文件,您必须请求以下一项或多项细化的媒体权限,而不是READ_EXTERNAL_STORAGE 权限:

媒体类型

请求权限

图片和照片

READ_MEDIA_IMAGES

视频

READ_MEDIA_VIDEO

音频文件

READ_MEDIA_AUDIO

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

在后台运行时需要访问身体传感器信息,除了现有的 BODY_SENSORS 权限外,您还必须声明新的 BODY_SENSORS_BACKGROUND 权限。

9.应用置于“受限”状态,除非应用因其他原因启动,否则系统不会传送 BOOT_COMPLETED 广播或 LOCKED_BOOT_COMPLETED 广播。

10.针对附近 Wi-Fi 设备的新运行时权限:NEARBY_WIFI_DEVICES

此外,只要应用不会通过 Wi-Fi API 推导物理位置,那么在以 Android 13 或更高版本为目标平台时,就无需声明 ACCESS_FINE_LOCATION 权限。

Android的适配之版本内容适配 - Alasola - 博客园 (cnblogs.com)