背景
Android M 提供了一种处理选定文本的新方法(链接 here ),即使是在您的应用之外。文本选择可以这样处理:
我知道可以从应用程序外部处理选定的文本,因为如果我转到网络浏览器(或任何其他允许文本选择的地方),我可以看到我可以使用“API 演示”应用程序来处理选定的文本。
问题
我看不到很多关于如何做的信息。
问题
- 应该在代码(和 list )中添加什么才能从应用程序外部处理选定的文本?
- 是否可以将选择限制为某些类型的文本?例如,仅当文本类型是有效电话号码时才提供显示应用程序?
最佳答案
首先,澄清问题:在 M 模拟器上,如果突出显示文本,您将看到新的 float 操作模式。如果您单击溢出图标,您将看到“API DEMOS”出现:
单击它会从 API 演示应用程序中调出一个 Activity ,显示突出显示的文本:
替换字段中的值并单击按钮将替换文本放入,以替换您突出显示的内容。
警告:以下解释来自检查 API 演示代码和 M Developer Preview 文档。这很有可能会在 M 为 realz 发货之前改变。 YMMV,除非您使用公制系统,在这种情况下为 YKMV。
有问题的 Activity ,即接收文本,支持 ACTION_PROCESS_TEXT
作为 Intent
行动。 EXTRA_PROCESS_TEXT
将包含一些文本,或 EXTRA_PROCESS_TEXT_READONLY
如果文本是只读的,将保留它。该 Activity 将通过 startActivityForResult()
调用.结果 Intent
可以有自己的EXTRA_PROCESS_TEXT
值,这将是替换文本。
所以,具体问题:
What should be added in code (and manifest) to be able to handle the selected text from outside the app ?
见上文。请注意,API 演示 Activity (ProcessText
) 具有此 <intent-filter>
:
<intent-filter >
<action android:name="android.intent.action.PROCESS_TEXT"/>
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
文档不讨论 MIME 类型。我没有运行任何实验来确定是否需要 MIME 类型,以及我们可能得到的其他内容(text/html
对于具有跨度的内容?)。
Is it possible to limit the selection to certain types of texts ? For example, offer to show the app only if the text type is a valid phone number ?
鉴于文档,这似乎是不可能的。话虽如此,这当然是一个合理的想法(例如,通过文本必须匹配的 list 中的元数据来宣传一个正则表达式或多个正则表达式)。
关于android - 如何使用从您的应用程序外部提供的 "Text Selection"的新 Android M 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30518089/