Android 升级TargetSdkVersion30

2024-06-04 2947阅读

一、概要

因为国内应用市场已经要求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文件中添加单独查询声明
    
    

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

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

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

三、总结

总的来说,TSDK=30是个关键的版本。

适配重点关注:

  1. 使用Enviroment.getExternalStorageDirectory()存储的方式需要变更
  2. 软件包可见性需要添加声明,影响分享、跳转其他APP等功能

    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]