美文网首页
targetSdkVersion22升级至29 关注点

targetSdkVersion22升级至29 关注点

作者: 壹元伍角叁分 | 来源:发表于2021-10-28 19:57 被阅读0次

    targetSdkVersion22升级至29 关注点

    Android 6.0 (API 23 )变更
    Android 7.0 (API 24 )变更
    Android 8.0 (API 26 )变更
    Android 9.0 (API 28 )变更
    Android 10 (API 29 )变更

    1、权限相关

    一、危险权限

    1. 文件管理权限(android.permission.MANAGE_EXTERNAL_STORAG)

      需要 Android 11 及以上

    1. 安装应用权限(android.permission.REQUEST_INSTALL_PACKAGES)

      需要 Android 8.0 及以上。Android 11 特性调整,安装外部来源应用需要重启 App:https://cloud.tencent.com/developer/news/637591

    1. 通知栏权限(android.permission.NOTIFICATION_SERVICE)

      需要 Android 6.0 及以上,注意此权限不需要在清单文件中注册也能申请

    1. 悬浮窗权限(android.permission.SYSTEM_ALERT_WINDOW)

      需要 Android 6.0 及以上。 在 Android 10 及之前的版本能跳转到应用悬浮窗设置页面,而在 Android 11 及之后的版本只能跳转到系统设置悬浮窗管理列表了。具体详情请看官方文档解释:https://developer.android.google.cn/reference/android/provider/Settings#ACTION_MANAGE_OVERLAY_PERMISSION

    1. 系统设置权限(android.permission.WRITE_SETTINGS)

      需要 Android 6.0 及以上

    二、运行时权限

    正常申请即可。

    三、普通权限

    在应用的清单文件中请求即可

    2、过时方法

    targetSdkVersion >= 29,Environment.getExternalStorageDirectory()方法过时,不推荐使用。
    推荐使用 Context.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS)
    如果项目中已使用,须在AndroidMainfest的application中添加下面一段代码

    android:requestLegacyExternalStorage="true"
    

    3、API 28+ 之后限制http请求,必须用https

    解决方案:创建个network_security_config.xml文件,添加以下代码。

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <base-config cleartextTrafficPermitted="true" />
    </network-security-config>
    

    在androidMainfest中配置在application中

    <application 
       android:networkSecurityConfig="@xml/network_security_config">
    

    4、在应用间共享文件

    对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file:// URI。如果一项包含文件 URI 的 intent 离开您的应用,则应用出现故障,并出现 FileUriExposedException 异常。

    要在应用间共享文件,您应发送一项 content:// URI,并授予 URI 临时访问权限。进行此授权的最简单方式是使用 FileProvider 类。

    比如请求拍照并保存到本地时:

    1. 在清单文件下注册

      <provider
          android:name="androidx.core.content.FileProvider"
          android:authorities="com.xh.tea_app.provider"
          android:exported="false"
          android:grantUriPermissions="true">
          <meta-data
              android:name="android.support.FILE_PROVIDER_PATHS"
              android:resource="@xml/provider_paths" />
      </provider>
      
    2. res/xml/provider_paths类

      <?xml version="1.0" encoding="utf-8"?>
      <paths xmlns:android="http://schemas.android.com/apk/res/android">
          // 文件夹目录/storage/emulated/0/xuehai/Image/camera/简写xuehai/Image/camera/
          <external-path name="image_files_path" path="xuehai/Image/camera/"/>
      </paths>
      
    3. 在代码中将Uri.fromFile替换

      Uri imageUri;
      // Android 7.0以前的方式
      imageUri = Uri.fromFile(cameraFile);
      // Android 7.0以上的方式.
      // com.xh.tea_app.provider需要和清单文件中定义的provider保持一致
      imageUri = FileProvider.getUriForFile(this, "com.xh.tea_app.provider", cameraFile);
      grantUriPermission(getPackageName(), imageUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
      

    5、

    相关文章

      网友评论

          本文标题:targetSdkVersion22升级至29 关注点

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