Android - 打开、分享文件的实现

本文详细介绍了在Android中如何实现打开和分享文件的功能。通过在AndroidManifest.xml中配置<intent-filter>,<action>,<category>和<data>标签,使App能够接受并处理不同类型和来源的文件。内容涵盖了如何声明Activity处理图片和文本文件,以及如何处理不同API级别下的Intent。同时,文章还提到了华为Mate 10和三星设备上可能遇到的不同URI前缀问题。
摘要由CSDN通过智能技术生成

一、基础知识

我们需要让自己的 App 能打开文件或者接受其它 App 分享出来的文件,实际上就是 App 隐式调用的一种应用,需要使用 <intent-filter>、<data>、<action> 等标签,在 AndroidManifest.xml 中定义我们的 App 可以进行的操作,以及类型限制。

<intent-filter> 标签

官方介绍:

Specifies the types of intents that an activity, service, or broadcast receiver can respond to. An intent filter declares the capabilities of its parent component — what an activity or service can do and what types of broadcasts a receiver can handle. It opens the component to receiving intents of the advertised type, while filtering out those that are not meaningful for the component.

Most of the contents of the filter are described by its <action>, <category>, and <data> subelements.

<intent-filter> 标签,是用来过滤我们 App 可以进行的活动和接受的广播。里面可以声明作用范围(使用 MimeType )以及 URL 地址(使用 scheme)等。

可以理解为我们对于当前 Activity 可以接受的 Intent 的过滤器,里面的标签限制了我们能执行的动作,如 <action> 就是我们在创建 Intent 时,setAction() 设置进去的动作。

<action> 标签

官方介绍:

Adds an action to an intent filter. An <intent-filter> element must contain one or more <action> elements. If there are no <action> elements in an intent filter, the filter doesn’t accept any Intent objects. See Intents and Intent Filters for details on intent filters and the role of action specifications within a filter.

<action> 标签,是用来指定 App 可以执行的 Intent 的操作类型。比如 android.intent.action.ACTION_SEND 表示当前 Activity 可以接受“分享”的操作。

一个 <intent-filter> 标签下,至少应该包含一个 <action> 标签,并且如果 <action> 标签的内容和其它的标签冲突,比如 ACTION_SEND 和 这个标签的内容就是冲突的,最终会导致这个 <action> 的定义失效。

我们应该尽量不要在 <intent-filter> 中定义多个 <action>,避免相互冲突。

<category> 标签

官方介绍:

Adds a category name to an intent filter. See Intents and Intent Filters for details on intent filters and the role of category specifications within a filter.

<category> 标签,用来声明接受的 Intent 的类型。

为了接收隐式 Intent,必须将 CATEGORY_DEFAULT 类别包括在 Intent 过滤器中。 方法 startActivity() 和 startActivityForResult() 将按照已申明 CATEGORY_DEFAULT 类别的方式处理所有 Intent。 如果未在 Intent 过滤器中声明此类别,则隐式 Intent 不会解析为您的 Activity。

<data> 标签

<data> 标签可以包含的内容:

<data android:scheme="string"
      android:host="string"
      android:port="string"
      android:path="string"
      android:pathPattern="string"
      android:pathPrefix="string"
      android:mimeType="string" />

官方介绍:

Adds a data specification to an intent filter. The specification can be just a data type (the mimeType attribute), just a URI, or both a data type and a URI. A URI is specified by separate attributes for each of its parts:

<scheme>://<host>:<port>[<path>|<pathPrefix>|<pathPattern>]

These attributes that specify the URL format are optional, but also mutually dependent:

  • If a scheme is not specified for the intent filter, all the other URI attributes are ignored.
  • If a host is not specified for the filter, the port attribute and all the path attributes are ignore
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值