我想知道Android应用程序和Android如何实现共享按钮和共享机制。例如,当我点击YouTube上的共享按钮时,弹出要共享的应用列表。如何确定此列表?是否存在特定的“共享”意图,然后显示能够共享意图附加中提供的意图类型的所有位置?用于实现此目的的设计模式的技术名称是什么?谢谢。
我想知道Android应用程序和Android如何实现共享按钮和共享机制。例如,当我点击YouTube上的共享按钮时,弹出要共享的应用列表。如何确定此列表?是否存在特定的“共享”意图,然后显示能够共享意图附加中提供的意图类型的所有位置?用于实现此目的的设计模式的技术名称是什么?谢谢。
Answers:
这有两个部分:通信应用程序说它们可以共享事物的机制,以及内容共享的应用程序的机制。我将一次与他们打交道,但首先简要说明一下意图。
Android 的意图是启动应用程序。它可以像快捷方式一样工作,也可以像Windows文件关联一样工作。目的可以指定要启动的应用程序的名称,但不必指定。它还可以指定要执行的操作(例如“打开您的主要活动”,“查看此URL”,“创建日历项”)以及将要执行的对象的MIME类型(例如您要查看的内容)的图片类型为jpeg)。某些操作名称特定于特定应用程序,但许多名称已由Android标准化以允许应用程序进行交互。
每个应用程序都会指定意图过滤器,以说明其可以执行的操作。例如,图像查看器应用程序将为MIME类型为“ image / *”的“查看此URL”注册一个意图过滤器;Web浏览器将为“查看此URL”注册一个意图过滤器,其中URL方案为“ http”或“ https”。为了能够共享内容,应用程序为“发送”意图注册了一个意图过滤器,可以使用特定类型(例如,如果它只能共享照片)或任何类型。
想要共享某些内容的应用程序使用“共享”操作和指向要共享的内容的URL创建一个意图。(这通常是一个“临时” URL,它使接收方的应用程序可以临时访问内容应用程序的私有存储中的文件或内容应用程序生成的流。)它没有指定处理名称的应用程序的名称意图。然后,它将意图提供给Android框架,并要求Android显示选择器对话框。Android将意图与所有已安装应用程序的意图过滤器进行比较,并创建列表并将其显示给用户。当用户选择一个特定的应用程序时,Android会启动该应用程序并传递其意图。该应用程序使用URL从原始应用程序获取内容。
在棉花糖中,还有另一种机制称为Direct Share。这补充了意图机制,以便您可以直接从选择器对话框中选择要共享的人或组,而跳过了“您希望将其发送给谁”的额外步骤。它的工作原理略有不同:通信应用程序必须提供服务。当包含内容的应用要求选择者时,Android会为每个相关应用启动服务。服务会返回相关共享目标的列表,Android 会将所有这些单独的列表组装到对话框中显示的列表中。
我不是开发人员,所以我只能给出一个原始的解释:应用程序在其声明的Manifest
Mimetype中声明他们了解并愿意对共享操作做出响应。为此,它们定义了所谓的“意图过滤器”,例如:
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="application/*" />
<data android:mimeType="audio/*" />
<data android:mimeType="image/*" />
<data android:mimeType="message/*" />
<data android:mimeType="multipart/*" />
<data android:mimeType="text/*" />
<data android:mimeType="video/*" />
</intent-filter>
因此,每当您单击“共享”按钮时,都会评估要共享的内容,并与声明愿意接收格式的应用程序进行匹配。
资料来源: