Android官方推荐 无需向应用授予的照片选择器工具

官网链接 Photo picker  |  Android Developers

不能跳转链接看这

Photo picker

照片选择器对话框会显示在您的设备上的媒体文件中。选择一张照片与应用程序分享。 图1. 照片选择器提供了一个直观的用户界面,用于与您的应用程序分享照片。 照片选择器提供了一个可浏览、可搜索的界面,向用户呈现了他们的媒体库,按日期从新到旧排序。如隐私最佳实践代码实验所示,照片选择器提供了一种安全的、内置的方式,用户可以通过它授予您的应用程序仅对所选图像和视频的访问权限,而不是他们的整个媒体库。

该工具会自动更新,随着时间的推移,为您的应用程序的用户提供了扩展功能,而无需进行任何代码更改。

Use Jetpack Activity contracts

为了简化照片选择器的集成,包括 androidx.activity 库的 1.7.0 版或更高版本。

使用以下活动结果合同来启动照片选择器:

PickVisualMedia 以选择单个图像或视频。

PickMultipleVisualMedia 以选择多个图像或视频。 如果设备上没有照片选择器,则库会自动调用 ACTION_OPEN_DOCUMENT 意图操作。

此意图在运行 Android 4.4(API 级别 19)或更高版本的设备上受支持。您可以通过调用 isPhotoPickerAvailable() 来验证在给定设备上是否可用照片选择器。

选择单个媒体项目 要选择单个媒体项目,请使用 PickVisualMedia 活动结果合同,如下面的代码片段所示:

// 在单选模式下注册照片选择器活动启动器。
val pickMedia = registerForActivityResult(PickVisualMedia()) { uri ->//在用户选择媒体项目或关闭照片选择器后调用回调。if (uri != null) {Log.d("PhotoPicker", "Selected URI: $uri")} else {Log.d("PhotoPicker", "No media selected")}
}// 只包括以下其中一个调用来启动(),具体取决于您希望让用户选择的媒体类型。
// 启动照片选择器,让用户选择图像和视频。
pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.ImageAndVideo))//启动照片选择器,让用户仅选择图像。
pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.ImageOnly))//启动照片选择器,让用户仅选择视频。
pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.VideoOnly))//启动照片选择器,让用户仅选择特定 MIME 类型的图像/视频,例如 GIF。
val mimeType = "image/gif"
pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.SingleMimeType(mimeType)))

注意:在使用 PickVisualMedia 时,照片选择器会以半屏模式打开。

选择多个媒体项目 要选择多个媒体项目,请设置最大可选择媒体文件的数量,如下面的代码片段所示。

// 在多选模式下注册照片选择器活动启动器。
// 在此示例中,应用程序允许用户选择最多 5 个媒体文件。
val pickMultipleMedia =registerForActivityResult(PickMultipleVisualMedia(5)) { uris ->// 在用户选择媒体项目或关闭照片选择器后调用回调。if (uris.isNotEmpty()) {Log.d("PhotoPicker", "Number of items selected: ${uris.size}")} else {Log.d("PhotoPicker", "No media selected")}
}// 对于此示例,启动照片选择器,让用户选择图像和视频。如果您希望用户选择特定类型的媒体文件,
// 使用 launch() 的重载版本,如有关如何选择单个媒体项目的部分所示。
pickMultipleMedia.launch(PickVisualMediaRequest(PickVisualMedia.ImageAndVideo))

平台限制了您可以要求用户在照片选择器中选择的文件的最大数量。要访问此限制,

请调用 getPickImagesMaxLimit()。在不支持照片选择器的设备上,将忽略此限制。

注意:如果照片选择器不可用,并且支持库调用 ACTION_OPEN_DOCUMENT 意图操作,则系统会忽略指定的最大可选择媒体文件数量。

Device availability

照片选择器可用于满足以下条件的设备:

运行 Android 11(API 级别 30)或更高版本 通过 Google 系统更新接收对模块化系统组件的更改 运行 Android 4.4(API 级别 19)到 Android 10(API 级别 29)之间的旧设备

以及运行 Android 11 或 12 的支持 Google Play 服务的 Android Go 设备可以安装照片选择器的后移版本。

要通过 Google Play 服务启用后移的照片选择器模块的自动安装,

请在应用程序清单文件的 <application> 标签中添加以下条目:

<!-- 触发 Google Play 服务安装后移的照片选择器模块. -->
<service android:name="com.google.android.gms.metadata.ModuleDependencies"android:enabled="false"android:exported="false"tools:ignore="MissingClass"><intent-filter><action android:name="com.google.android.gms.metadata.MODULE_DEPENDENCIES" /></intent-filter><meta-data android:name="photopicker_activity:0:required" android:value="" />
</service>

Persist media file access

默认情况下,系统会授予您的应用程序对媒体文件的访问权限,直到设备重新启动或您的应用程序停止。

如果您的应用程序执行长时间运行的工作,例如在后台上传大文件,您可能需要将此访问权限持续保持更长的时间。

为此,请调用 takePersistableUriPermission() 方法:

val flag = Intent.FLAG_GRANT_READ_URI_PERMISSION
context.contentResolver.takePersistableUriPermission(uri, flag)

这段代码将帮助您确保您的应用程序能够在需要时持续访问所选媒体文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/79212.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Excel数学、工程和科学计算插件:FORMULADESK Studio

如果 Excel 是您的武器 - 让我们磨砺您的剑&#xff01;为整天使用 Excel 的人们提供创新的 Excel 加载项&#xff0c;你需要这个 FORMULADESK Studio。。。 Excel 插件为任何使用 Excel 执行数学、工程和科学计算的人提供了必备工具。 * 将公式视为真正的数学方程 * 为您的公…

供应商整合对企业有哪些好处?

企业采购总是希望降低成本&#xff0c;赢得更多的利润。实现这目标的其中一种方法就是供应商整合。 究竟什么是供应商整合&#xff1f;整合供应商有哪些好处&#xff1f;本文为你详细解答。 什么是供应商整合&#xff1f; 供应商整合是减少特定产品或服务的供应商数量的过程。…

[当人工智能遇上安全] 9.基于API序列和深度学习的恶意家族分类实例详解

您或许知道&#xff0c;作者后续分享网络安全的文章会越来越少。但如果您想学习人工智能和安全结合的应用&#xff0c;您就有福利了&#xff0c;作者将重新打造一个《当人工智能遇上安全》系列博客&#xff0c;详细介绍人工智能与安全相关的论文、实践&#xff0c;并分享各种案…

混合项目管理:如何成功地整合传统与敏捷方法?

若你尚未涉足于混合项目管理这一领域&#xff0c;且暗自以为其难以捉摸、令人费解&#xff0c;我们向你承诺&#xff0c;实则并非如此。 在深入探究混合项目管理这一主题之前&#xff0c;我们先澄清几项基础但关键的专业术语。在当今这个商业竞争愈发激烈的环境中&#xff0c;项…

如何将一个字符串转换为驼峰命名法(camel case)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 思路⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领…

面试算法3:前n个数字二进制形式中1的个数

题目 输入一个非负数n&#xff0c;请计算0到n之间每个数字的二进制形式中1的个数&#xff0c;并输出一个数组。例如&#xff0c;输入的n为4&#xff0c;由于0、1、2、3、4的二进制形式中1的个数分别为0、1、1、2、1&#xff0c;因此输出数组[0&#xff0c;1&#xff0c;1&…

Linux运维基础知识大全

一. Linux组成 1. 内核 内核&#xff1a;系统空间的代码和数据的集合称为内核&#xff08;Kernel&#xff09;&#xff1b;kernel是操作系统内部最核心的软件&#xff0c;和硬件打交道的 1.对cpu进行管理&#xff0c;进程调度到cpu里进行管理 2.对内存进行空间的分配&#xff0…

nginx 配置反向代理

一、首先进入/usr/local/nginx/conf中&#xff0c;修改nginx.conf文件 二、配置信息 在server{}中 location ^~/api {proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "Upgrade";proxy_http_version 1.1;proxy_set_header Host $host;proxy_se…

算法通关村-----系列文章整理

第一关 原来链表这么有用 链表青铜关卡 链表增删改查 链表白银关卡 两个链表第一个公共子节点问题 判断链表是否为回文序列 合并有序链表 链表经典问题之双指针 链表黄金关卡 待更新。。。 第二关 两天写了三次的链表反转 链表反转青铜挑战 三种方式实现手写链表反…

递归学习——记忆化搜索

目录 ​编辑 一&#xff0c;概念和效果 二&#xff0c;题目 1.斐波那契数 1.题目 2.题目接口 3.解题思路 2.不同的路径 1.题目 2.题目接口 3.解题思路 3.最长增长子序列 1.题目 2.题目接口 3.解题思路 4.猜数字游戏II 1.题目 2.题目接口 3.解题思路 总结&a…

私域流量的优势与变现方式

私域流量是指通过建立自己的粉丝群体&#xff0c;实现粉丝运营和内容输出&#xff0c;从而获得更高价值的流量资源。那么&#xff0c;相较于传统营销模式私域流量究竟有哪些优势&#xff1f;如何通过私域流量实现变现呢&#xff1f;本文将为你一一解答。 私域流量的优势在于&a…

使用 Sealos 一键部署高可用 MinIO,开启对象存储之旅

大家好&#xff01;今天这篇文章主要向大家介绍如何通过 Sealos 一键部署高可用 MinIO 集群。 MinIO 对象存储是什么&#xff1f; 对象是二进制数据&#xff0c;例如图像、音频文件、电子表格甚至二进制可执行代码。对象的大小可以从几 B 到几 TB 不等。像 MinIO 这样的对象存储…

解决 Axios 跨域问题,轻松实现接口调用

跨域是指访问另外一个域的资源&#xff0c;由于浏览器的同源策略&#xff0c;默认情况下使用 XMLHttpRequest 和 Fetch 请求时是不允许跨域的。跨域的根本原因是浏览器的同源策略&#xff0c;这是由浏览器对 JavaScript 施加的安全限制。 Axios 跨域常见报错 跨域请求被阻止 (…

vue中 字体图标引入 - iconfont阿里字体图标库

官网&#xff1a;iconfont-阿里巴巴矢量图标库 代码应用中&#xff0c;有许多方法&#xff0c;如何使用该图标库。如&#xff0c;icon单个使用、unicode引用、或 font-class引用&#xff08;推&#xff09;、symbol&#xff08;svg合集&#xff09;。本文主讲 font-class 方法…

Git(9)——Git多人协同开发之创建初始项目

目录 一、简介 二、创建新项目 三、本地Git接入 四、创建远端仓库——Gitee 五、推送代码至远端仓库 一、简介 前面8章都是我们一个人独自开发&#xff0c;如果现在项目新增两名同事&#xff0c;我们就需要使用Git来实现多人协同开发&#xff0c;从第九章开始将介绍从零到…

Jenkins教程—构建多分支流水线项目

本教程向你展示如何使用Jenkins协调一个用 Node Package Manager (npm) 管理的简单 Node.js 和 React 项目&#xff0c; 并同时 为开发和产品环境交付不同的结果。 在开始本教程之前&#xff0c;建议你前往 教程概览 页面&#xff0c;并至少完成一个 介绍教程&#xff0c; 从而…

利用红黑树封装map和set

目录 一、正向迭代器1.1 operator1.2 operator--1.3 参考代码 二、反向迭代器三、封装set四、封装map五、底层红黑树的实现 一、正向迭代器 我们之前vector&#xff0c;list这些都是容器的迭代器都是简单的指针或者_node_node->next这样的&#xff0c;那是因为它们要么是连…

背包问题---怎么选取物品,可以使得背包装的物品价值最大?

原文&#xff1a; https://zhuanlan.zhihu.com/p/567560364 1&#xff09;0-1背包问题的描述 现在有四种物品&#xff0c;每种物品只有1件&#xff0c;它们的重量与价值如下表。 现在有一个背包&#xff0c;总容量为8。问怎么选取物品&#xff0c;可以使得背包装的物品价值…

yolov5添加ECA注意力机制

ECA注意力机制简介 论文题目&#xff1a;ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks 论文地址&#xff1a;here 基本原理 &#x1f438; ECANet的核心思想是提出了一种不降维的局部跨通道交互策略&#xff0c;有效避免了降维对于通道注意…

【力扣每日一题】2023.9.12 课程表Ⅳ

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 今天是课程表系列题目的最后一题&#xff0c;因为我在题库里找不到课程表5了&#xff0c;所以今天的每日一题就是最后一个课程表了。 题…