Android 如何使用新的安卓M功能";文本选择“;从应用程序外部提供? 背景
安卓M提供了一种处理选定文本(链接)的新方法,即使是从应用程序外部。文本选择可以这样处理: 我知道可以从应用程序外部处理所选文本,因为如果我进入web浏览器(或任何其他允许文本选择的地方),我可以看到我可以使用“API演示”应用程序处理所选文本 问题 我看不到很多关于如何做的信息 问题Android 如何使用新的安卓M功能";文本选择“;从应用程序外部提供? 背景,android,android-manifest,textselection,android-6.0-marshmallow,Android,Android Manifest,Textselection,Android 6.0 Marshmallow,安卓M提供了一种处理选定文本(链接)的新方法,即使是从应用程序外部。文本选择可以这样处理: 我知道可以从应用程序外部处理所选文本,因为如果我进入web浏览器(或任何其他允许文本选择的地方),我可以看到我可以使用“API演示”应用程序处理所选文本 问题 我看不到很多关于如何做的信息 问题 应该在代码(和清单)中添加什么才能处理来自应用程序外部的选定文本 是否可以将选择限制在特定类型的文本?例如,仅当文本类型为有效电话号码时才提供显示应用程序 首先,澄清这个问题:在M模拟器上,如果突出显示文本,您
首先,澄清这个问题:在M模拟器上,如果突出显示文本,您将看到新的浮动操作模式。如果单击溢出图标,将显示“API演示”: 单击该按钮可从API演示应用程序中调出活动,显示突出显示的文本: 替换字段中的值并单击按钮将替换文本作为高亮显示内容的替换
警告:以下解释来自于查看API演示代码和M Developer预览文档。很有可能,这将改变之前,M船舶的realz。YMMV,除非使用公制,在这种情况下为YKMV 正在讨论的活动(即接收文本)支持
ACTION\u PROCESS\u text
作为Intent
操作EXTRA\u PROCESS\u TEXT
将保留某些文本,或者如果文本为只读,则EXTRA\u PROCESS\u TEXT\u READONLY
将保留该文本。该活动将通过startActivityForResult()
调用。结果Intent
可以有自己的EXTRA\u PROCESS\u TEXT
值,该值将作为替换文本
因此,对于具体问题:
应该在代码(和清单)中添加什么才能处理来自应用程序外部的选定文本
见上文。请注意,API演示活动(ProcessText
)包含以下内容:
文档中没有讨论MIME类型。我还没有运行任何实验来确定是否需要MIME类型,以及我们还可能得到什么(text/html
对于具有跨度的内容?)
是否可以将选择限制在特定类型的文本?例如,仅当文本类型为有效电话号码时才提供显示应用程序
考虑到文档,这似乎是不可能的。也就是说,这当然是一个合理的想法(例如,通过清单中文本必须匹配的元数据宣传一个正则表达式或多个正则表达式)。在Android开发者博客上,它描述了如何将Google Translate选项添加到溢出文本选择菜单中
使用Android文本选择行为的Android应用程序将已经
启用此功能,因此无需采取额外步骤。
为应用程序创建自定义文本选择行为的开发人员
可以通过以下步骤轻松实现此功能:
通过PackageManager扫描所有具有
PROCESS\u TEXT
intent过滤器(例如:
com.google.android.apps.translate
-如果已安装)并将其添加为
将菜单项设置为应用程序的文本视图选项
要查询包管理器,首先使用操作构建意图
Intent.ACTION\u PROCESS\u TEXT
,然后检索支持的活动
并为每个检索到的活动添加一个项,并为其附加一个意图
发起行动
您链接的内容中没有描述“来自应用程序外部”。@commonware这就是为什么我要问这个问题,因为它不存在。正如我所写的,我知道这是可能的,因为我在模拟器上运行了它,选择了API演示之外的文本。它甚至出现在我自己的应用程序上。从上下文菜单中选择“API演示”将打开“API演示”应用程序,它显示我选择的内容。@androiddeveloper链接不正确。您可能想用以下内容更新它:@Saket他们可能输入错误。不管怎样,谢谢。我想问题很清楚。我写的信息缺失,我注意到了功能,但找不到如何使用它,因为它不在那里。为了以防万一,我重新编辑了它。关于答案,谢谢。现在,我假设您是正确的,所以我将勾选它。我已经写了一个关于此的建议:。希望其他人会喜欢。Mime类型是必需的,至少是我从实验中学到的。文本/纯文本对我很有用。还没有尝试过其他mime类型:我注意到在Android O上我们可以指定文本的类型,但由于某种原因,到目前为止,我已经成功地将电话号码仅用于拨号操作。您可以检查一下吗:?是否可以为上下文菜单上显示的操作指定一个图标?我注意到,在一些应用程序上有一个图标,但大多数都没有。hidro-你知道如何触发onInitializeMenu吗?
<intent-filter >
<action android:name="android.intent.action.PROCESS_TEXT"/>
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
public void onInitializeMenu(Menu menu) {
// Start with a menu Item order value that is high enough
// so that your "PROCESS_TEXT" menu items appear after the
// standard selection menu items like Cut, Copy, Paste.
int menuItemOrder = 100;
for (ResolveInfo resolveInfo : getSupportedActivities()) {
menu.add(Menu.NONE, Menu.NONE,
menuItemOrder++,
getLabel(resolveInfo))
.setIntent(createProcessTextIntentForResolveInfo(resolveInfo))
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
}
}