You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Smart-Linkify(智能文本选择)向其他应用提供应用操作?

关于Android智能文本选择(Smart Text Selection)的问题解答

我来帮你逐个拆解这些问题,结合Android系统的机制和实践经验来解释:

1. 该功能仅适用于Android O及以上吗?在Android M/N上实现会有什么表现?

没错,Smart Text Selection(智能文本选择)是Android O(API 26)正式引入的系统级功能,它依赖系统内置的TextClassifier来识别文本类型(比如手机号、邮箱),并自动弹出对应的操作选项。

在Android M(API 23)和N(API 24/25)上,并没有这个基于文本类型触发的智能操作机制——你之前接触的「通用文本处理方案」应该是PROCESS_TEXT intent,这个是Android M引入的,但它是全局触发的:不管用户选中什么文本,只要你的应用注册了PROCESS_TEXT,就会出现在操作菜单里,无法像O+的Smart Text Selection那样只针对特定文本类型显示。

2. 如何向其他应用提供自定义操作(如手机号搜索)?

要向其他应用提供自定义操作,核心是通过注册PROCESS_TEXT的intent-filter,结合代码里的文本判断逻辑来实现,步骤如下:

第一步:在AndroidManifest中配置Intent Filter

在你用来处理操作的Activity(或者Service)里添加以下配置,注意设置android:label来定义操作显示的名称,以及指定处理纯文本类型:

<activity android:name=".TextSearchActivity">
    <intent-filter>
        <action android:name="android.intent.action.PROCESS_TEXT" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>

第二步:在Activity中处理选中的文本

在TextSearchActivity里,获取用户选中的文本,判断是否为手机号,然后执行搜索逻辑:

class TextSearchActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 获取选中的文本
        val selectedText = intent.getStringExtra(Intent.EXTRA_PROCESS_TEXT) ?: ""
        // 判断是否为手机号(这里用简单的正则,你可以根据需求调整)
        val phoneRegex = "^1[3-9]\\d{9}$".toRegex()
        if (phoneRegex.matches(selectedText)) {
            // 执行你的搜索逻辑,比如打开自家应用的搜索页面
            val searchIntent = Intent(this, SearchActivity::class.java)
            searchIntent.putExtra("PHONE_NUMBER", selectedText)
            startActivity(searchIntent)
        } else {
            // 如果不是手机号,可以提示用户或者直接关闭
            Toast.makeText(this, "请选择有效的手机号", Toast.LENGTH_SHORT).show()
        }
        finish() // 处理完后关闭当前Activity
    }
}

另外,如果你想让操作只在系统识别到手机号时显示,在Android O+上可以结合TextClassifier的能力,但本质上还是需要先通过PROCESS_TEXT注册,再在代码里做过滤。

3. 能否自定义操作显示文本?仅发现PROCESS_TEXT可修改标签;

是的,只有通过PROCESS_TEXT注册的自定义操作可以完全自定义显示文本——就是在intent-filter里的android:label字段,你可以设置成任意你想要的文案,比如「搜索手机号」「查询归属地」等。

而系统自带的Smart Text Selection操作(比如拨号、打开网址),它们的显示文本是系统内置的,无法直接修改。如果想要自定义显示文本,只能通过注册自己的PROCESS_TEXT操作来替代或补充系统操作。

4. 能否自定义触发条件(如正则匹配)?目前仅支持手机号,还有哪些过滤方式?

自定义触发条件的方式

系统默认的Smart Text Selection是基于TextClassifier识别文本类型(比如手机号、邮箱、URL、物理地址、日期时间等),如果想要自定义触发条件(比如特定格式的工号、订单号),目前没有直接在系统层面配置过滤的方法,只能通过以下方式实现:

  • 注册PROCESS_TEXT操作,然后在代码里用正则表达式、字符串匹配等方式判断选中的文本是否符合你的条件,符合才执行操作,不符合就提示用户或直接关闭。
  • 在Android O+上,你可以自定义TextClassifier并集成到系统,但这个需要系统级权限,普通第三方应用无法做到,所以对大多数开发者来说,第一种方法是可行的方案。

系统支持的默认文本类型

系统自带的TextClassifier可以识别以下常见文本类型,会自动触发对应的系统操作:

  • 手机号:触发拨号、发送短信等操作
  • 邮箱地址:触发发送邮件操作
  • URL链接:触发打开浏览器操作
  • 物理地址:触发打开地图操作
  • 日期/时间:触发添加到日历操作

内容的提问来源于stack exchange,提问作者android developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:40:53