Android 调用系统应用选文件

本文介绍了如何通过Intent在Android中调用系统应用选择文件,如图片、视频、音频,强调了不同系统版本的兼容性问题。ACTION_OPEN_DOCUMENT能直接读取stream但无法获取path,ACTION_GET_CONTENT和ACTION_PICK则可以。同时,讨论了H5的input标签如何与WebChromeClient协同工作,并提示了ACTION_GET_CONTENT和ACTION_OPEN_DOCUMENT在多选文件时的注意事项,以及onActivityResult的处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android 调用系统应用选文件

我们通常会通过Intent调起系统应用进行选择文件,包括图片、视频、音频等,但是需要考虑不同系统版本的兼容性问题

系统版本 action accept_type(选择文件类型)
<19(4.4) Intent.ACTION_GET_CONTENT 通过intent.setType,设置一个字符串表示MIMEType:“image/*, video/*”
>=19(4.4) Intent.ACTION_OPEN_DOCUMENT
  • intent.setType字符串只接收一个类型,多个无效
  • 通过putExtra的Intent.EXTRA_MIME_TYPES属性,设置string数组指定多种选择类型,此时intent.setType要设置为"*/*"
all Intent.ACTION_PICK 通过setData设置URI,一次只能选择一种类型文件,且类型限于系统API提供的几种,通常选择联系人之类的使用
  1. 指定Intent.CATEGORY_OPENABLE,获取到的都是可以打开stream的URI,不能打开stream的URI不会被选择

  2. 使用ACTION_OPEN_DOCUMENT不可以直接拿到path(除非自己处理),但是可以直接打开stream读取内容(ACTION_GET_CONTENT和ACTION_PICK当然也可以)

  3. H5的input标签会调用WebChromeClient的相应方法(openFileChooser()/onShowFileChooser())(这部分内容可以参考这篇文章),该方法回调会接收URI,并交给前端,前端可以通过URI展示具体文件。

  4. ACTION_GET_CONTENT和ACTION_OPEN_DOCUMENT通过指定boolean类型的Intent.EXTRA_ALLOW_MULTIPLE(API18(4.3)才可以用),使用户可以选择多个文件返回,此时返回的URIs在data.getClipData()中,这里需要注意,在H5的input标签情景下,由于API21开始ValueCallback才接收Uri数组,所以在API18和API19中,不能设置为多选,否则回调只能处理一个Uri。

调用代码

//ACTION_GET_CONTENT ACTION_OPEN_DOCUMENT
val intent = Intent()
intent.addCategory(Intent.CATEGORY_OPENABLE)
if (android
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值