首页 > 其他分享 >Android官方推荐 无需向应用授予的照片选择器工具

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

时间:2023-09-12 11:35:58浏览次数:43  
标签:选择 无需 用户 PickVisualMedia 照片 Android 选择器

官网链接 https://developer.android.google.cn/training/data-storage/shared/photopicker?hl=en

不能跳转链接看这

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)

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

标签:选择,无需,用户,PickVisualMedia,照片,Android,选择器
From: https://www.cnblogs.com/javaktolin/p/17695726.html

相关文章

  • 基于Android毕业生管理系统的设计与实现-计算机毕业设计源码+LW文档
    一、研究的背景意义高校是培养人才的地方,对智能化发展非常重视,教育部搭建的教育网,专门为教育教学提供帮助。利用教育网的基础搭建各种管理系统,实现校园内信息的有效管理,对教育教学、学生生活、高校宣传等进行综合管理。在毕业生管理中,功能模块的数据通过数据库存储,并为各个模块预......
  • Android程序员掌握这些面试技巧,offer拿到手软
    前言面试的顺利与否,直接决定了你是否能获得心仪的offer以及是否能拿到满意的薪资。如果说,简历是获得面试的通行证的话,那面试无疑是决定你是否能获得这份工作的重中之重。因此为自己的面试认真做个准备还是性价比很高的一件事情。面试前准备的四要素,简历、面经、知己知彼,录音设备。......
  • 安卓Termux搭建web服务器【公网远程手机Android服务器】
    概述Termux是一个Android终端仿真应用程序,用于在Android手机上搭建一个完整的Linux环境,能够实现Linux下的许多基本操作,不需要root权限Termux就可以正常运行。Apache是一个开源网页服务器软件,由于其跨平台和安全性,被广泛使用,是最流行的Web服务器软件之一。我们可以在Android手......
  • Android平台GB28181接入SDK
     华脉智联推出的Android平台GB28181接入SDK,可实现不具备国标音视频能力的Android终端,通过平台注册接入到现有的GB/T28181—2016服务,可用于如执法记录仪、智能安全帽、智能监控、智慧零售、智慧教育、远程办公、明厨亮灶、智慧交通、智慧工地、雪亮工程、平安乡村、生产运输、......
  • Android平台GB28181接入SDK
    华脉智联推出的Android平台GB28181接入SDK,可实现不具备国标音视频能力的Android终端,通过平台注册接入到现有的GB/T28181—2016服务,可用于如执法记录仪、智能安全帽、智能监控、智慧零售、智慧教育、远程办公、明厨亮灶、智慧交通、智慧工地、雪亮工程、平安乡村、生产运输、车载终......
  • Android之Bmob移动后端云服务器
    PS:一般情况下,我们在写android程序的时候,想要实现登录注册功能,可以选择自己用servlet作为服务端来实现过滤没有注册过的用户,但是太麻烦,而且不是随时都可以用的。这里介绍一个移动后端云服务器平台bmob,这不仅可以实现云数据库储存,还可以获取手机验证等,随时随地都很轻松,下面写一个小de......
  • Android之Bmob移动后端云服务器
    PS:一般情况下,我们在写android程序的时候,想要实现登录注册功能,可以选择自己用servlet作为服务端来实现过滤没有注册过的用户,但是太麻烦,而且不是随时都可以用的。这里介绍一个移动后端云服务器平台bmob,这不仅可以实现云数据库储存,还可以获取手机验证等,随时随地都很轻松,下面写一个小de......
  • 想跳出Android内卷困境,简历匹配上大厂你需要做到那些
    内卷化是一个近年来在中文网络上经常出现的词汇,通常用来描述某个领域中过度的竞争和内部消耗。这个概念直观地说就是“向内演化”,更广泛地说,所有没有实质意义的消耗都可以称为内卷。在生活中,许多看似精益求精的重复工作,实际上是在内部范围内施展,而不是向外扩张,这也可以被视为内卷的......
  • android 混淆proguard_rule
    #设置混淆的压缩比率0~7-optimizationpasses5#混淆时不使用大小写混合,混淆后的类名为小写-dontusemixedcaseclassnames#混淆时不记录日志-verbose#代码优化-dontshrink#保留注解不混淆-keepattributes*Annotation*,InnerClasses#避免混淆泛型-keepattributesSignatu......
  • Android9.0 SystemServerCrash问题总结
    设备在反复休眠唤醒后SystemServer挂掉背景:同事自测发现,当反复按压Power键后概率性出现系统挂掉的问题。分析过程查看系统log如下:12-0511:43:27.53015091759IWatchdog:CollectingBinderTransactionStatusInformation12-0511:43:29.70415091759EWatchdog:First......