Android11 适配

这篇具有很好参考价值的文章主要介绍了Android11 适配。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、修改targetSdkVersion为30

将build.gradle的目标版本targetSdkVersion修改为30(Android 11)

 targetSdkVersion 30

Android11的改变改变主要影响以Adnroid11 为目标版本的应用(targetSdkVersion>=30才有影响),和所有应用在Android11设备上适配改动(无论targetSdkVersion是多少,只要在Android11设备上运行的应用都有影响)

二、Android11需要适配的地方

1、分区存储

分区存储,将公共区域划分成了不同的集合,并且在媒体文件和其他文档之间建立了清楚的分割。经过划分之后应用不可以随意访问外部存储区中的文件,而只能访问媒体文件。如果想访问包含更多细节数据的其他文档,应用专门向用户申请有关文档的访问权限。

关于分区存储,在Android10就已经推行了,简单的说,就是应用对于文件的读写只能在沙盒环境,也就是属于自己应用的目录里面读写。其他媒体文件可以通过MediaStore进行访问。

但是在android10的时候,Google还是为开发者考虑,留了一手。在targetSdkVersion = 29应用中,设置android:requestLegacyExternalStorage=“true”,就可以不启动分区存储,让以前的文件读取正常使用。但是targetSdkVersion = 30中不行了,强制开启分区存储,设置android:requestLegacyExternalStorage="true"已经无效了。

四种访问文件的方法:

1)应用专属目录

//分区存储空间
val file = File(context.filesDir, filename)//应用专属外部存储空间
val appSpecificExternalDir = File(context.getExternalFilesDir(), filename)

2)访问公共媒体目录文件

   val cursor = contentResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, "${MediaStore.MediaColumns.DATE_ADDED} desc")
        if (cursor != null) {
            while (cursor.moveToNext()) {
                val id = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns._ID))
                val uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id)
                println("image uri is $uri")
            } cursor.close()
        }

3)SAF(存储访问框架–Storage Access Framework)

     val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
        intent.addCategory(Intent.CATEGORY_OPENABLE)
        intent.type = "image/*"
        startActivityForResult(intent, 100)
        @RequiresApi(Build.VERSION_CODES.KITKAT) 
        override fun onActivityResult(requestCode:Int, resultCode:Int, data:Intent ?){
            super.onActivityResult(requestCode, resultCode, data)
            if (data == null || resultCode != Activity.RESULT_OK) returnif(requestCode == 100) {
                val uri = data.dataprintln("image uri is $uri")
            }
        }

4)获取所有文件权限MANAGE_EXTERNAL_STORAGE(官方不推荐),这个权限是给文件管理类软件、杀毒软件使用的
在清单文件中添加权限,这个权限就是用来获取所有文件的管理权限

    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
        val intent = Intent()
        intent.action = Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION
        startActivity(intent)
        //判断是否获取MANAGE_EXTERNAL_STORAGE权限:
        val isHasStoragePermission= Environment.isExternalStorageManager()

2、应用包可见性

在 Android 11 之前,我们可以通过 PackageManager.getInstalledPackages(0) 获取其他所有应用的包名等信息。
Android 11 为了增加安全性,更好地保护用户的隐私,对应用包的可见性做出了一些改动。

当 targetSdkVersion 为 30 时,如果我们用getPackageInfo(“another.app”,0) 获取其他应用包信息时 ,会出现 NameNotFoundException 的异常。

我们可以在 AndroidMainfest 中添加 来适配特定的使用场景:(该配置相当于是添加应用白名单)

已知想获取的包名:

	<queries>
		<package android:name="com.test.application1"/>
		<package android:name="com.test.application2"/>
		<package android:name="com.test.application3"/>
	</queries>

3、权限变化

在 Android 11 中,系统为用户的私人数据提供了更多可供选择的授权方式,应用也加大了后台对位置的访问权限限制。

对应摄像头、位置信息和麦克风这几个数据类型,用户可以授予一次性的临时访问权限。
android11适配,android
这个一次性权限的生效周期指的是:

应用 Activity 可见期间
应用转为后台后的短时间内
前台服务存活期间
当用户撤销单次授权后,应用进程退出,再次打开之后需要对应用进行重新授权期间

4、位置权限

在Android10 之前,我们通过ACCESSCOARRSELOCATION 或 ACCESSFINELOCATION(精确位置) 配置即可申请前后台位置权限。

Android 11将位置权限分为前台和后台两种权限。前文说的主要是前台权限,授权方式没有变化。应用想要申请后台权限,除了需要在清单文件中额外添加 ACCESSBACKGROUNDLOCATION 权限外,还需要应用主动引导用户到指定页面授权。

Android 11 要求面向 API 级别为 30 的应用使用递增式位置权限请求。任何同时申请前台位置权限 (无论是粗略位置还是精确位置) 和后台位置权限的请求都会被忽略并且报错。

需要先申请前台位置权限,然后在稍晚些再申请后台位置权限。文章来源地址https://www.toymoban.com/news/detail-762853.html

	<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />//后台位置权限

到了这里,关于Android11 适配的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android文件选择器 路径选择 支持安卓4.4 ~ 13 支持Android/data目录访问 支持SD卡 适配Android11

    Android上进行文件选择或操作的第三方库,自动申请存储权限,支持 Android4.4 ~ 13,再也不用为了适配各种版本而苦恼了,快速集成,一句代码搞定,完善的文档,支持无root权限访问和操作Android/data和Android/obb目录(适配Android 13),支持SD卡,高度自定义UI满足你的所有需求,使用非常

    2024年02月04日
    浏览(43)
  • 基于RK3399 Android11适配OV13850 MIPI摄像头

      从上图可看出,我们需要关心的,①MIPI数据和时钟接口使用的是MIPI_TX1/RX1 ②I2C使用的是I2C4总线 ③RST复位引脚使用的是GPIO2_D2 ④PWDN使用的是GPIO1_C7 ⑤MCLK使用的是GPIO3_B7 ⑥需要保证红色框框的供电电源正常。   结合RK提供的文档,如下摄像头数据采集拓扑图所示,我们

    2024年03月14日
    浏览(47)
  • RK3288 Android11 RTL8723DS WiFi 和 蓝牙Bluetooth 适配

      瑞芯微RK系列对“REALTEK瑞昱公司”的wifi、蓝牙双模的模组都有内置适配的,因此HAL层、Framework层、协议栈及库文件都不需要移植适配,只需修改设备树和一些配置文件即可。 补充: RTL8723DS时钟输入源讲解   RTL8723DS模组的第24号引脚是模组的时钟输入源,需要给此提供

    2024年02月07日
    浏览(79)
  • android 布局 横屏 android横屏适配

    一、刘海屏适配 1、layoutInDisplayCutoutMode属性 Android 9.0系统中提供了3种layoutInDisplayCutoutMode属性来允许应用自主决定该如何对刘海屏设备进行适配。 LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT 这是一种默认的属性,在不进行明确指定的情况下,系统会自动使用这种属性。这种属性允许应用程

    2024年02月09日
    浏览(38)
  • android8、android13自适应图标适配

    前言:为了解决应用图标在不同android手机上的外观样式问题,google官方在android8和android13两个版本做了变更(这2个版本都提供了向下兼容),下文介绍适配方法以及 注意事项(此处有彩蛋) 。 一、android8(API27)适配 1、找到资源文件夹:mipmap-anydpi-v26(若旧的as里没有默认生成,

    2024年02月09日
    浏览(70)
  • Android模拟蓝牙蓝牙键盘——适配Android和Windows

    学校寒假有个程序设计比赛,我也一直想要去写一个安卓模拟的蓝牙键盘,这样无论到哪里,比如班班通和没有键盘的电脑设备,有手机就可以操作它,也比USB方便一些。忙活了一个寒假,也走了不少歪路,终于整成了,下面分享一些经验。 (学校的软件设计比赛已经交了终

    2024年04月28日
    浏览(38)
  • Android CameraX适配Android13的踩坑之路

    最近把AGP插件升级到8.1.0,新建项目的时候目标版本和编译版本都是33,发现之前的demo使用Camerax拍照和录像都失败了,于是查看了一下官网和各种资料,找到了Android13的适配方案. 与早期版本一样,Android 13 包含一些行为变更,这些变更可能会影响您的应用。以下行为变更仅影

    2024年02月12日
    浏览(75)
  • Android(6-13)适配

    Android 6 1、运行时权限 android6.0以前,我们把app需要用到的权限全部罗列在Manifest清单文件中。安装app时android系统会询问用户是否授予这些权限,拒绝后则无法安装app。如果授予,则安装app,之后无法修改授予状态。 android6.0将权限分为普通权限(不涉及用户隐私和安全)和危

    2024年02月02日
    浏览(50)
  • Android 13 适配指南

    是的,你没看错,现在就要带你适配 Android13 。 2022 的Google I/O 发布了 Android 13 beta 2 和 Android 13 Beta 1 国内厂商的设备支持列表,虽然按照惯例, Android 13 应该是年末才发布正式版,但是相信有的开发者已经收到了平台的 Android13 的适配要求,所以本篇也是结合 Oppo 的 Android 1

    2024年02月05日
    浏览(45)
  • Android适配平板屏幕尺寸

    一、划分手机和平板 人为判断方法:     大于6英寸的就是平板。小于6英寸的都是手机     平板尺寸: 6英寸、7英寸、10英寸、14英寸… Android系统支持多配置资源文件,我们可以追加新的资源目录到你的Android项目中。命名规范: 资源名字-限制符 layout/drawble文件夹     说

    2024年04月14日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包