android 7.0 禁止 imei,Android一些适配

# Android 版本适配重点

其他细节请查看官网对应版本:https://developer.android.com/preview

## 7.0

1. 后台优化

- 移除了以下静态注册广播通知(动态注册可继续使用):CONNECTIVITY_ACTION  ACTION_NEW_PICTURE ACTION_NEW_VIDEO

2. 系统权限更改

- Android 7.0 或更高版本的应用私有目录被限制访问,传递软件包网域外的 file:// URI 可能给接收器留下无法访问的路径。因此,尝试传递 file:// URI 会触发 FileUriExposedException。分享私有文件内容的推荐方法是使用 FileProvider,并授予 URI 临时访问权限

- DownloadManager 不再按文件名分享私人存储的文件。旧版应用在访问 COLUMN_LOCAL_FILENAME 时可能出现无法访问的路径。面向 Android 7.0 或更高版本的应用在尝试访问 COLUMN_LOCAL_FILENAME 时会触发 SecurityException。通过使用 DownloadManager.Request.setDestinationInExternalFilesDir() 或 DownloadManager.Request.setDestinationInExternalPublicDir() 将下载位置设置为公共位置的旧版应用仍可以访问 COLUMN_LOCAL_FILENAME 中的路径,但是我们强烈反对使用这种方法。对于由 DownloadManager 公开的文件,首选的访问方式是使用ContentResolver.openFileDescriptor()。

file:// 类型的Uri无法使用,需要使用FileProvider转换

3. 多窗口模式

3.1 适配多窗口模式

https://developer.android.com/guide/topics/ui/multi-window?hl=zh_cn

3.2 关闭多窗口模式

在清单的 activity 或 application 元素中设置此属性,以启用或停用多窗口显示:

```html

android:resizeableActivity=["true" | "false"]

```

## 8.0

1. 后台执行限制

- 尝试在不允许其创建后台服务的情况下使用 startService() 函数,则该函数将引发一个 IllegalStateException

应使用startForegroundService函数,并且应用必须在创建服务后的五秒内调用该服务的 startForeground() 函数

2. 应用快捷键

https://developer.android.com/about/versions/oreo/android-8.0-changes?hl=zh-cn#as

3. 通知

针对 8.0 的应用,创建通知前需要创建渠道,创建通知时需要传入 channelId,否则通知将不会显示

4. 升级

针对 8.0 的应用需要在 AndroidManifest.xml 中声明 REQUEST_INSTALL_PACKAGES 权限,否则将无法进行应用内升级

5. 桌面图标(不强制,但是桌面图片显示会有白底)

https://mp.weixin.qq.com/s/WxgHJ1stBjokPi6lTUd1Mg

6. 广播

移除所有为隐式广播 Intent 注册的广播接收器,改为动态注册

7. 安装apk

需要增加权限

```html

```

## 9.0

1. 前台服务

应用以 Android 9 或更高版本为目标平台并使用前台服务,则必须请求 FOREGROUND_SERVICE 权限,系统会自动为请求权限的应用授予此权限,如果不请求 FOREGROUND_SERVICE权限将会报错,Manifest加入:

```html

```

2. 网络

使用https或者加入配置项android:networkSecurityConfig

3. Apache HTTP 客户端弃用

所以要想继续使用Apache HTTP,需要在应用的 AndroidManifest.xml 文件中添加

```html

```

4. 启动Activity

不能直接非 Activity 环境中(比如Service,Application)启动 Activity,否则会崩溃报错,需要Intent 中添加标志FLAG_ACTIVITY_NEW_TASK

## 10

1. 禁止后台启动Activity

使用通知触发,需要在AndroidManifest上增加权限USE_FULL_SCREEN_INTENT申明

2. 设备硬件信息读取限制,AndroidId,IMEI不可获取

3. Scope Store

可以使用以下配置停用分区存储

- 如果targetSdkVersion < 29,那么不用处理

- 如果targetSdkVersion >= 29,加入一下配置

```html

Android 10 or higher. -->

...

```

使用分区存储,如果不需要访问其他应用的公开文件,则不需要申请读写权限READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE

- 内部存储

可使用原有File API访问方式

- 外部存储

1. 外部公开目录

可供其他应用和用户自由访问的文件,卸载您的应用后,这些文件应该仍然可供用户使用

只有通过MediaStore API或者SAF(可在任意目录下新建文件,但是是通过用户交互方式),并且限制目录只能为媒体文件或者下载目录,无法使用File API访问

- 如果要保存照片、音频文件或视频剪辑,请使用 MediaStore API

- 如果要保存任何其他文件(如 PDF 文档),请使用 ACTION_CREATE_DOCUMENT intent,这是存储访问框架(SAF的一部分。此操作会调起系统UI界面

2. 外部私有目录

使用getExternalFilesDir()函数访问,后续操作可使用File API

卸载应用时会被清除,调用 getExternalFilesDir() 并传入指明您想要的目录类型的名称来获取特定于应用的目录,或调用getExternalFilesDir()传入自定义文件夹名称

```kotlin

//固定图片目录

getExternalFilesDir(DIRECTORY_PICTURES)

//自定义目录

getExternalFilesDir("myDir")

```

4. 后台定位权限

需要ACCESS_BACKGROUND_LOCATION权限

5. 限制使用非SDK接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值