首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

迁移到sdk 30 android 11后获取额外空间

迁移到SDK 30并使用Android 11时,获取额外空间的问题通常与存储访问权限和分区存储(Scoped Storage)有关。以下是关于这个问题的基础概念、优势、类型、应用场景,以及可能遇到的问题和解决方案。

基础概念

Scoped Storage 是Android 11引入的一种新的存储机制,旨在增强应用的隐私保护。它限制了应用对共享存储的访问权限,应用只能访问其自己的沙盒目录,除非用户明确授权。

优势

  1. 增强隐私保护:限制应用对共享存储的访问,减少数据泄露风险。
  2. 简化存储管理:应用只需管理自己的沙盒目录,无需处理复杂的共享存储权限。

类型

  1. 内部存储:应用私有目录,只能被该应用访问。
  2. 外部存储:包括共享存储和媒体存储,需要用户授权才能访问。

应用场景

在Android 11及更高版本中,所有应用默认使用Scoped Storage。如果你的应用需要访问外部存储中的文件,必须适配Scoped Storage。

可能遇到的问题

  1. 无法访问外部存储:由于Scoped Storage的限制,应用无法直接访问外部存储中的文件。
  2. 文件权限问题:即使用户授权,应用也可能因为权限配置不当而无法访问文件。

解决方案

  1. 适配Scoped Storage
    • 使用MediaStore API访问媒体文件。
    • 使用Storage Access Framework(SAF)让用户选择文件。
  • 请求存储权限
    • AndroidManifest.xml中声明存储权限。
    • AndroidManifest.xml中声明存储权限。
    • 在运行时请求权限。
    • 在运行时请求权限。
  • 使用内部存储
    • 如果应用不需要访问外部存储,可以考虑使用内部存储。
    • 如果应用不需要访问外部存储,可以考虑使用内部存储。

示例代码

以下是一个使用MediaStore API访问媒体文件的示例:

代码语言:txt
复制
// 查询图片
Uri collection;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    collection = MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL);
} else {
    collection = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
}

String[] projection = new String[]{
    MediaStore.Images.Media._ID,
    MediaStore.Images.Media.DISPLAY_NAME,
};

String sortOrder = MediaStore.Images.Media.DATE_TAKEN + " DESC";

Cursor cursor = getContentResolver().query(collection, projection, null, null, sortOrder);

if (cursor != null) {
    while (cursor.moveToNext()) {
        long id = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID));
        String displayName = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME));
        // 处理图片
    }
    cursor.close();
}

参考链接

通过以上方法,你可以成功迁移到SDK 30并适配Android 11的Scoped Storage,解决获取额外空间的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android 11 应用兼容性适配,看这篇就够了

分区存储将存储空间分为两部分: ● 公共目录:Downloads、Documents、Pictures 、DCIM、Movies、Music、Ringtones等 ■ 公共目录的文件在App卸载...2 如果可用的存储空间不足,使用 intent action —ACTION_CLEAR_APP_CACHE 呈现UI界面让用户确认,触发所有应用的缓存清理。...因此,Android 11上引入了Package Visibility新特性。它改造了获取app信息的接口,且封堵了SDK接口以外变相获取app安装状态的途径。...3.11 限制非SDK接口 1 背景 Android 11 包含更新的受限制非 SDK 接口列表,在限制使用非 SDK 接口之前,Google尽可能确保提供公开替代方案。...#test-for-non-sdk 2 如果您的应用依赖于非 SDK 接口,则应该开始计划迁移到 SDK 替代方案。

12.7K42

Android11 (API30)适配

如果您需要对已安装的应用进行适配分区存储的数据迁移,则可以在应用更新到目标平台为Android 11版本仍暂时保留原有的存储模式。...2 如果可用的存储空间不足,使用 intent action —ACTION_CLEAR_APP_CACHE 呈现UI界面让用户确认,触发所有应用的缓存清理。...因此,Android 11上引入了Package Visibility新特性。它改造了获取app信息的接口,且封堵了SDK接口以外变相获取app安装状态的途径。...3.11 限制非SDK接口 1 背景 Android 11 包含更新的受限制非 SDK 接口列表,在限制使用非 SDK 接口之前,Google尽可能确保提供公开替代方案。...#test-for-non-sdk 2 如果您的应用依赖于非 SDK 接口,则应该开始计划迁移到 SDK 替代方案。

7.9K11
  • 安卓11适配攻略详细版

    但是当 target API 更新为 30 ,系统会忽略该配置。...应用包可见性 在 Android 11 之前,我们可以通过 PackageManager.getInstalledPackages(0) 获取其他所有应用的包名等信息。...当 targetSdkVersion 为 30 时,如果我们用getPackageInfo(“another.app”,0) 获取其他应用包信息时 ,会出现 NameNotFoundException...只要是在Android 11 上,该限制都会生效,如下图: image.png 这个一次性权限的生效周期指的是: 应用 Activity 可见期间 应用转为后台后的短时间内 前台服务存活期间 当用户撤销单次授权...为了提升SDK的稳定性、兼容性,个推也对Android 11 的新特性进行了深入研究,并即将针对旗下产品推出全新的适配方案,以满足开发者不同的使用场景。

    1.8K10

    产品上新丨即时通信 IM SDK 5.3.425 版本发布了

    新版本更新特性: 支持会话置顶 发送不计入未读计数的消息 单聊消息免打扰 增加获取所有会话未读总数的接口 Android SDK移到 Maven Central 仓库发布 iOS SDK 新增 XCFramework...版本,正式支持 Mac Catalyst 下载地址: Android:https://github.com/tencentyun/TIMSDK/tree/master/Android/SDK iOS:...增加获取所有会话未读总数的接口 为了提高接口的易用性,新版本 SDK 增加了获取所有会话未读总数的接口 getTotalUnreadMessageCount。...Android SDK移到 Maven Central 仓库发布 众所周知,JCenter 官方将于 2021 年 5 月 1 日停止服务,为了不影响客户的正常使用,即时通信 IM SDK 从这个版本开始...11 开始支持的一种包括多个架构并且可以在多个平台(iOS,macOS,tvOS,watchOS,iPadOS,carPlayOS)上使用的框架库。

    1.5K30

    聚焦 Android 11: 大功告成

    分区存储:  在 Android 11 中,所有目标 API 级别 (Target SDK Level) 为 30 的应用都将强制使用分区存储功能。...请查看以下实用资源,确保您的应用能够兼容 Android 11: 官方文档: 将应用迁移到 Android 11 官方文档: 可能影响应用的行为变更 详情文章: 使用新工具测试应用与 Android 11...卓盟科技最近将其 LeBian SDK 从非 SDK 接口转移到稳定的官方 API,由此得以随着时间的推移与 Android 操作系统保持更高的兼容性。...如果您尚未迁移到 MDC,可以先来看看我们的 迁移指南。...资源 您可以在 Android 11 标签页 获取全部主题内容,或查看 #11WeeksOfAndroid 视频内容的 完整视频列表,或者前往官方网站也可以详细 了解更多主题。

    2K30

    AndroidR兼容性适配指南

    管理设备存储空间Android 11 开始,使用分区存储模型的应用只能访问自身的应用专用缓存文件。如果您的应用需要管理设备存储空间,请按照关于如何查询可用空间的说明操作。...,Android 11(API 级别 30)及更高版本允许您使用 MediaStore API 以外的 API 来访问共享存储空间中的媒体文件。...后台位置信息访问权限 Android 11 更改了应用中的功能获取后台位置信息访问权限的方式。本部分介绍了上述各项变更。...无论目标 SDK 是什么,Android 11 上的存储访问框架都无法用于获取Android/data 和 Android/obb 目录的访问权限。详细了解这些限制和测试行为的方法。...而我们在Android10适配的时候又把相关的数据文件迁移到了应用的私有空间也可以通过File API进行文件访问。 最后呢!

    2K20

    拖不得了,Android11真的来了,最全适配实践指南奉上

    Android 11(version 30,Andorid R) 正式发布了!...” 也就是说,Android11中,如果你想去获取其他应用的信息,比如包名,名称等等,不能直接获取了,必须在清单文件中添加元素,告知系统你要获取哪些应用信息或者哪一类应用。...但是,Android 11开始,这样写不能获取辅助按钮回调事件了,得换成另外一种写法。...应用使用情况统计信息 “为了更好地保护用户,Android 11 将每个用户的应用使用情况统计信息存储在凭据加密存储空间中。...非SDK接口限制 “Android 11 包含更新的受限制非 SDK 接口列表(基于与 Android 开发者之间的协作以及最新的内部测试)。

    7K340266

    UI自动化截图哪家快,minicap截图最快!

    就是minicap模块,通过ndk接口,执行minicap和minicap.so文件指定接口,通过socket协议把图片传回来形成视频流,只是后来由于android10以上,权限收紧,特别是oppo,...就是调试minicap是否兼容android发布的版本,比如现在发布了android11了,然后也有编译的android30了,那能不能截图,我android11的手机,要怎么确认,是否兼容呢?...刚好小弟我,也是自己匹配了荣耀V50pro android11 minicap 的android30是否兼容,以便于把该设备,上架stf设备共享平台; 今天我分享不是怎么快,而是分享下怎么去看自己的android11...,也就是android11系统,刚好是大家所需要的; 5.准备1台安卓11的手机,当然其他手机也是可以的。...CPU架构,命令:adb shell getprop ro.product.cpu.abi 获取sdk版本(安卓)adb shell getprop ro.build.version.sdk 3.知道

    2.5K10

    卓盟科技: 动态资源加载技术背后的兼容性升级 | Android 开发者故事

    Android 11 提供 ResourcesLoader 接口之前,卓盟科技打造动态资源加载的过程并不轻松。...卓盟科技发现,随着每次 Android 新版本的发布,兼容性问题会意外出现。这些都需要进行额外的测试和开发,以确保产品的稳定性。...可持续的解决方案 随着 Android 系统团队越来越专注于帮助应用迁移到公开接口的工作,卓盟科技看到了彻底解决兼容性问题的曙光。...他们联系了 Android 团队来提供反馈,说明他们的具体用例和对公开接口的详细需求。 在双方的多次沟通和持续协作下,Android 11 中首次发布了支持动态资源加载的公开接口。...更为重要的是,由于 ResourcesLoader 是 Android 11 中的公开接口,整个 Android 开发者社区都可以利用它来获得收益。

    13620

    Android8.0、9.0、10.0、11.0的新特性兼容适配代码修改

    ,而Android8和Android9的众多新特性还涉及到其它的代码适配,下面就补充列出Android8、Android9、Android10的额外兼容处理说明: Android8.0 1、属性动画组合...获取设备序列号的兼容代码示例如下: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { et_wifi_name.setText...2、普通应用无法开启或者关闭WiFi功能 一旦build.gradle的targetSdkVersion设置29或更高数值(表示目标SDK版本为Android11或以上版本),则调用WifiManager...2、Android11新增了查询所有应用的权限QUERY_ALL_PACKAGES 通常调用PackageManger的getInstalledApplications方法可以获取已安装的应用列表,获取代码示例如下...3、Android11默认WebView不能访问存储卡上的网页 build.gradle中采用Android11编译时(targetSdkVersion 30),WebView无法访问存储卡的网页文件

    1.1K20

    如何内网使用Cloud云最新MSP迁移工具箱Docker镜像?

    获取工具箱、 工具箱采用 Docker 镜像方式提供,可以通过镜像仓库拉取或直接下载镜像包到本地? 镜像仓库:可以直接使用 docker pull 命令从镜像仓库拉取。...docker pull ccr.ccs.tencentyun.com/mspya/toolbox:latest 镜像下载地址:单击下载 工具箱,下载到本地,通过 docker import 命令导入。...工具箱包含功能 云步骤和方案 将整个迁移过程按照不同阶段进行细化,在每一个具体的实施步骤中提供最佳实践和相应的工具。即使对云项目不熟悉,也可以跟随云步骤的引导一步步完成云实施。...产品选型 从友商云迁移到腾讯云,会面临同一类型产品名称不同、规格不同的困难。产品选型对照表将友商云与腾讯云常用对标产品的名称/缩写以及具体的规格型号进行一一对应,解决迁移选型的困难。...redirect=11& 基于腾讯云CVM搭建Hadoop集群并做数据迁移 https://cloud.tencent.com/act/cps/redirect?

    3.3K41

    Tinker Android热补丁框架

    这里有个问题很关键,Tinker的亮点使用了QQ空间插桩的效果来规避Android的校验机制。NUWA分析里面有具体介绍。...2016-10-08 09:51:30屏幕截图.png 从类名可以知道Tinker处理了类的加载,资源的加载以及so库的加载.我们的关注点在类加载上,根据经验判断,TinkerLoader类是类加载模块的入口...PathClassLoader并读取dex与dvm优化的odex地址, 具体代码请查看原文(http://www.jianshu.com/p/11acde51ff0b) 或请点击下方查看原文 接着遍历...开发者透明,不需要对包进行额外处理。 不足: 与超级补丁技术一样,不支持即时生效,必须通过重启应用的方式才能生效。 需要给应用开启新的进程才能进行合并,并且很容易因为内存消耗等原因合并失败。...合并时占用额外磁盘空间,对于多DEX的应用来说,如果修改了多个DEX文件,就需要下发多个patch.dex与对应的classes.dex进行合并操作时这种情况会更严重,因此合并过程的失败率也会更高。

    92430

    全民K歌推流直播Web实践

    例如,WXInlinePlayer使用的OpenH264解码模块,在iOS端和Android端有差异化的表现,在iOS端会对首帧进行额外解码,导致第二段音频每次都会包含第一段音频,从而使得画音不同步。...优化的flv解析流程如下: ? kg-player SDK 能够同时支持flv和hls两种格式的视频流播放,支持多码率流地址传入以及流地址切换。通过兼容性测试发现,hls支持大部分移动端设备。...kg-im sdk通过轮询的方式获取直播间的互动消息(礼物消息,评论消息,喇叭消息等),并根据消息池中消息的总数来弹性控制每次拉取消息间隔的时间,进而保证前端能够及时高效拉取消息且不会造成额外的网络开销...可以看到,整体降级率约为11.49%,这也表明flv在web端的支持有一定的优化空间。...且优化无需使用WASM进行软解码,所以首帧平均耗时也得到了降低: iOSAndroidFLV首帧的平均耗时(ms)3181.444981.139 除此之外,播放卡顿方面也有进一步的优化空间,通过实时监控页面的卡顿率

    5.5K2117
    领券