Android 升级TargetSdkVersion30

一、概要

因为国内应用市场已经要求TargetSdkVersion=30及以上才能上架,所以需要升级版本。

主要涉及内容以下讲解。

二、开发

1.强制分区存储

有很多文章已经介绍了,参考:
https://blog.csdn.net/unreliable_narrator/article/details/127250034
https://guolin.blog.csdn.net/article/details/113954552

所以目前操作文件的方式有三种:

1.老古董:File Path

使用方式好说。
存储目录介绍一下:
如果升级了项目的TargetSdkVersion=30及以上,那么就不可以使用Enviroment.getExternalStorageDirectory()

  1. 如果是APP升级到该版本,那么路径还在,但是访问会提示权限不够
  2. 如果是新安装该版本的APP,那么当你使用该目录作为根目录创建文件夹时,就会失败

所以此时想仍旧使用File Path的方式来保存文件,有两种方法:

  1. 使用Enviroment.getExternalStoragePublicDirectory(),是的,多了个Public,可以正常保存。
    然后使用通知相册更新的方法即可在相册可见。
    相册更新的方法有两种:
    a. sendBradCast 扫描相册的Action
    b. 使用MediaScannerConnection来进行更新,其本质代码也是使用MediaStore来通知更新的。

  2. 使用私有目录
    即使用context.getExternalFilesDir之类,也就是用上下文context来获取应用的私有目录。
    应用的私有目录:当然它的文件是位于应用包名的目录下,跟随APP卸载后即删除。这点不同于公有目录存储的文件,APP的删除与它的自动删除没有关联了。

注意的是:使用私有目录存储,使用1中的相册更新方法是无法通知相册更新的。

所以,如果为了项目快速适配TSDK=30及以上,可以考虑采用方式1。因为它需要的改动很小
当然,如果涉及到原有的文件迁移,那就需要另外写一套逻辑了。

2.MediaStore

自行搜索使用

疑问:使用该方法保存在私有目录,会自动更新在相册可见么?

3.SAF

自行搜索使用

2.软件包可见性

简而言之,要查询其他APP或者跳转其他APP的能力限制了,需要做处理之后才能正常使用。
(不处理:微信、抖音、小红书等APP无法跳转,会识别手机上未安装对应的APP)

方法有两种:

  1. manifest文件中添加查询声明
    uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" tools:ignore="QueryAllPackagesPermission"/>
    如果上架google play的话,这个权限审核会比较严格,仅限部分应用可以通过:安全、浏览器、文件等
    如果不是上述范围的应用的化,使用方法2。
  2. manifest文件中添加单独查询声明
<queries>
    <package android:name="com.tencent.mm" /><!-- 这是微信的包名 -->
    <package android:name="***" />
</queries>

需要查询、跳转哪个APP,则按照上述方法添加包名。

3.无法使用后台弹出的自定义Toast

即无法在后台时弹出通过Toast.setView方法的提示了。

三、总结

总的来说,TSDK=30是个关键的版本。
适配重点关注:

  1. 使用Enviroment.getExternalStorageDirectory()存储的方式需要变更
  2. 软件包可见性需要添加声明,影响分享、跳转其他APP等功能
  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ganshenml

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值