美文网首页
Android一些适配

Android一些适配

作者: 黄煤球 | 来源:发表于2020-03-30 18:24 被阅读0次

    # 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接口

    相关文章

      网友评论

          本文标题:Android一些适配

          本文链接:https://www.haomeiwen.com/subject/sptbuhtx.html