You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

将文件写入Android10公共DCIM目录,使用非废弃的方法。

在Android 10上,为了提高应用的安全性和隐私保护,使用传统文件系统API来访问公共目录已被废弃。相反,应用程序必须使用MEDIA_STORE访问公共目录。以下是一个示例,说明如何使用非Deprecated方法将文件写入公共DCIM目录。

首先,你需要在manifest文件中添加一个请求WRITE_EXTERNAL_STORAGE和REQUEST_MANAGE_EXTERNAL_STORAGE权限权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.REQUEST_MANAGE_EXTERNAL_STORAGE" />

然后,在你的代码中添加以下方法,即使在Android Q上也可以使用:

fun saveImage(bitmap: Bitmap, context: Context) {

val filename = "${System.currentTimeMillis()}.jpeg"

val values = ContentValues().apply {
    put(MediaStore.Images.Media.DISPLAY_NAME, filename)
    put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
    put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_DCIM)
}

val uri = context.contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)
    ?: throw IOException("Failed to create new MediaStore record.")

context.contentResolver.openOutputStream(uri).use { outputStream ->
    outputStream ?: throw IOException("Failed to open output stream.")
    if (!bitmap.compress(Bitmap.CompressFormat.JPEG, 95, outputStream)) {
        throw IOException("Failed to save bitmap.")
    }
}

}

可以看到,我们使用ContentValues存储文件信息,并在ContextResolver中插入一个新记录。这将返回我们存储媒体的Uri并在MessageRequest中打开文件输出流。最后,我们使用compress方法将Bitmap写入输出流中。

本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS 60元/年,域名1元起,助力开发者快速在云上构建可靠应用

社区干货

MAD,现代安卓开发技术:Android 领域开发方式的重大变革|社区征文

> Android 诞生已久,其开发方式保持着高频更迭,相较于早期的开发方式已大不相同,尤其是近几年 Google 热切推崇的 MAD 开发技术。> > **其实很多开发者已经有意或无意地正在使用这门技术,借着 2023 开年探讨技术趋... 有的时候 Google 会将其翻译成`现代安卓开发`,有的时候又翻译成`新式安卓开发`,个人觉得前者的翻译虽然激进、倒也贴切。下面按照 MAD 的构成要点逐步展开,帮助大家快速了解 MAD 的技术理念。如果大家对其中的语言...

跳槽、换房、不忘输出,一名 Android 开发者的 2022

*目录前瞻:*- 这一年的输出怎么样? * 20 篇文章 * 3 次分享 * 2021 吹的牛实现了吗?- 换完公司换房子 * 跳槽 * 卖房 * 买房- 2023 务实点~- 结语- 彩蛋- 往期总结## 这一年的输出... 现代安卓开发技术:Android 领域开发方式的重大变革~](https://juejin.cn/post/7056983987859750919)- [Android 车机初体验:Auto,Automotive 傻傻分不清楚?](https://juejin.cn/post/7110767099579990030)- [一次...

Android初始化时setupSDKEnv方法废弃如何调整

# 问题描述Android初始化AppLog时显示Env.setupSDKEnv方法废弃,应该如何修改。![图片](https://lf3-volc-editor.volccdn.com/obj/volcfe/sop-public/upload_5d00f2c7798e62202535e1cf0300d39b.png)# 解决方案1. 初始化方法调整为以下代码``` Env.openAppLog(true); String assetsLicenseUri = "assets:///License/xxxxx.lic"; Env.init(new Config.Builder() .setAppID(AppID)...

Android 14 返回界面大升级,预览界面和全新返回箭头|社区征文

可以查看笔者当时写的文章:[Android 13 返回导航大变更:返回键彻底废弃 + 可预见型返回手势](https://juejin.cn/post/7105645114760331300)。## 支持预览目标界面写上述文章时系统尚处于 13 beta 阶段,笔者并未看到 5 对应的 Back 预览效果,并以为 13 的最终版会实现该特性。但事实上直到 13 正式发布,该特性都没有到来,甚至是 14 beta 版都还没有正式发布。我们先来简单回顾一下全新的 Back 导航的适配方式:1. 开启 `e...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

将文件写入Android10公共DCIM目录,使用非废弃的方法。 -优选内容

MAD,现代安卓开发技术:Android 领域开发方式的重大变革|社区征文
> Android 诞生已久,其开发方式保持着高频更迭,相较于早期的开发方式已大不相同,尤其是近几年 Google 热切推崇的 MAD 开发技术。> > **其实很多开发者已经有意或无意地正在使用这门技术,借着 2023 开年探讨技术趋... 有的时候 Google 会将其翻译成`现代安卓开发`,有的时候又翻译成`新式安卓开发`,个人觉得前者的翻译虽然激进、倒也贴切。下面按照 MAD 的构成要点逐步展开,帮助大家快速了解 MAD 的技术理念。如果大家对其中的语言...
跳槽、换房、不忘输出,一名 Android 开发者的 2022
*目录前瞻:*- 这一年的输出怎么样? * 20 篇文章 * 3 次分享 * 2021 吹的牛实现了吗?- 换完公司换房子 * 跳槽 * 卖房 * 买房- 2023 务实点~- 结语- 彩蛋- 往期总结## 这一年的输出... 现代安卓开发技术:Android 领域开发方式的重大变革~](https://juejin.cn/post/7056983987859750919)- [Android 车机初体验:Auto,Automotive 傻傻分不清楚?](https://juejin.cn/post/7110767099579990030)- [一次...
Android初始化时setupSDKEnv方法废弃如何调整
# 问题描述Android初始化AppLog时显示Env.setupSDKEnv方法废弃,应该如何修改。![图片](https://lf3-volc-editor.volccdn.com/obj/volcfe/sop-public/upload_5d00f2c7798e62202535e1cf0300d39b.png)# 解决方案1. 初始化方法调整为以下代码``` Env.openAppLog(true); String assetsLicenseUri = "assets:///License/xxxxx.lic"; Env.init(new Config.Builder() .setAppID(AppID)...
Android
本文档介绍火山引擎移动解析(HTTPDNS)的客户端 Android SDK 版本说明。 1.0.24该版本发布于 2024 年 4 月 16 日。 新增功能自该版本起,SDK 可以按照您在 enableHttpDnsClearText 中的设置向 HTTPDNS 服务端发送 HT... 兼容性变更废弃方法该版本废弃了 IHttpDnsDepend 接口中与临时 Key 鉴权相关的方法: isTemporaryAuthentication 方法 getHttpdnsTemporaryKeyTimeStamp 方法 火山引擎推荐您使用 鉴权密钥 进行鉴权。 新增功能通过...

将文件写入Android10公共DCIM目录,使用非废弃的方法。 -相关内容

白板 SDK 发版说明

veWhiteboard SDK 1.8该版本于 2023 年 10 月 20 日发布。 新增特性互动白板新增了插入音视频文件的能力。用户可以通过播放器交互,控制已插入的音视频文件。 Android iOS Web 添加视频 addVideo addVideo:title:... 同时废弃 insertPageId 参数。 平台 Android iOS 页面创建结果回调 onCreatePagesProgress byteWhiteBoard:onCreatePagesProgress:pages:insertPageId:progress:totalCount: iOS 端 ByteWhiteBoardCursorType 鼠标...

导入和初始化 SDK

本文介绍了如何在 Android 项目中导入和初始化 SDK。 声明应用权限您需要在 Android 项目的 AndroidManifest.xml 文件中声明以下权限: xml 在项目中导入 SDK在项目的 build.gradle(Project: ) 文件中添加火山引擎的... 如果您希望使用固定 IP 地址接入 HTTPDNS 服务端,可以调用 setHttpDnsDomainList 方法,设置 SDK 通过固定 IP 地址接入 HTTPDNS 服务端。SDK 默认使用 httpdns.volcengineapi.com 域名接入 HTTPDNS 服务端。您可以调...

Android 客户端升级指南

如果你希望从此前版本的 Android 客户端 SDK 升级到最新的客户端 SDK,请在工程文件中,替换最新的客户端 SDK 文件,并参考本文完成 API,回调,参数类型等的替换。 升级过程中,你可能需要参考历史版本文档归档。 3.58类... 废弃枚举值 ERROR_CODE_OVER_SCREEN_PUBLISH_LIMIT=-1081,用 ERROR_CODE_OVER_STREAM_PUBLISH_LIMIT=-1080 替代。 3.50产物变更该版本 SDK 产物新增 apm_insight_crash_lite 依赖库,若以离线方式集成 SDK,需手动...

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

Android 14 返回界面大升级,预览界面和全新返回箭头|社区征文

可以查看笔者当时写的文章:[Android 13 返回导航大变更:返回键彻底废弃 + 可预见型返回手势](https://juejin.cn/post/7105645114760331300)。## 支持预览目标界面写上述文章时系统尚处于 13 beta 阶段,笔者并未看到 5 对应的 Back 预览效果,并以为 13 的最终版会实现该特性。但事实上直到 13 正式发布,该特性都没有到来,甚至是 14 beta 版都还没有正式发布。我们先来简单回顾一下全新的 Back 导航的适配方式:1. 开启 `e...

使用混音功能

在用户使用 “一起看”、“一起听” 等互动娱乐类应用时,如果需要在通话过程中播放音乐文件等,而且让房间内的其他成员也听到声音,需要使用音乐播放类。播放音乐指的是时长较长的音频或 PCM 数据,例如,伴奏、背景音... 可以调用 stop 方法。 java mediaPlayer.stop()swift self.mediaPlayerAudio?.stop()cpp int ret = player_audio->stop();暂停/恢复音乐 java mediaPlayer.pause()mediaPlayer.resume()swift self.mediaPlayerAudi...

Android SDK 参考

成员方法 成员方法 描述 onDiagnosisComplete 您需要实现该回调并在调用 DiagnosisRequest.start 方法时传入该回调。当网络分析完成、被取消、因网络切换中止、超时或失败时,SDK 都会通过该回调返回结果。 tryInitGameSdk 方法 描述 初始化 GNA SDK。该方法是异步的。目前 Android SDK 暂未提供初始化成功的回调。建议您尽早开始初始化。例如,您可以在 App 冷启动时开始初始化。 定义 java public class GameSdkClient { ...

SQL自定义查询(SaaS)

1. 使用说明 1.1 基本用法select event, event_time from events where event_date >= '2020-08-10' and event_date <= '2020-08-18' and event_time > 1597161600limit 20;前端展示1000条,下载可下载1000000条。 ... 事件公共属性、all_value类型的公共属性与业务对象属性。 字段 说明 stat_standard_id 统计口径ID,SSID或UUID,取决于app的统计口径。 列名曾为user_unique_id,现已废弃。 user_profiles.user_id 用户ID,匿名时...

新功能发布记录

本文介绍了火山引擎 TrafficRoute 解析调度套件的功能发布动态。 2024 年 4 月功能名称 功能描述 发布时间 发布地域 相关文档 火山引擎移动解析(HTTPDNS)升级客户端 SDK 在 1.0.24 版本,HTTPDNS Android SDK... 新增云产品权威域名功能 火山引擎的云产品通过跨服务访问的方式调用私网解析 PrivateZone 创建的域名,会以云产品权威域名的形式显示在私网解析 PrivateZone 的控制台上。 2023 年 12 月 13 日 全部 什么是云产...

Android SDK 埋点与属性

并保证其唯一性// 6.13.0+ 版本支持此方法在初始化 AppLog 前调用AppLog.setUserUniqueID("your_USER_UNIQUE_ID");(6.13.0+ 版本不推荐使用)通过该方法设置 uuid,仅在首次冷启动时设置生效。由于 AppLog.setUserU... 10);} catch (JSONException e) { e.printStackTrace();}AppLog.onEventV3("event", paramsObj); 2.2 事件公共属性如需在每个事件中都包括某属性,可通过公共属性设置,无需在每个事件中重复设置。公共属性只需...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询