PROCESS_TEXT 在 Android 11 之后的大多数应用中的文本选择菜单中不可见

问题描述

我在清单文件中有以下配置 -

<activity
            android:name=".activities.PopupWord"
            android:excludeFromrecents="true"
            android:theme="@style/popups">
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="text/*" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.PROCESS_TEXT" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="text/*" />
            </intent-filter>

            <intent-filter>
                <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="text/*" />
            </intent-filter>

        </activity>

我可以在 Android 10 中的 Twitter 等应用的文本选择菜单中看到我的“查找”按钮,但在 Android 11 中它消失了。令人惊讶的是,它可以在 Chrome 中运行。

维基百科 Beta 版以某种方式绕过了这个问题,并在各处显示了它的“在维基百科中搜索”按钮。我试图查看它的清单并发现它是相似的。

<activity
            android:name="org.wikipedia.search.SearchActivity"
            android:windowSoftInputMode="0x10">

            <intent-filter
                android:label="@ref/0x7f100190">
                <action
                    android:name="android.intent.action.SEND" />
                <category
                    android:name="android.intent.category.DEFAULT" />
                <data
                    android:mimeType="text/plain" />
            </intent-filter>

            <intent-filter
                android:label="@ref/0x7f100190">
                <action
                    android:name="android.intent.action.PROCESS_TEXT" />
                <category
                    android:name="android.intent.category.DEFAULT" />
                <data
                    android:mimeType="text/plain" />
            </intent-filter>
        </activity>

(我已经尝试制作 mimeType text/plain 并添加标签,但没有帮助)

任何线索都会有所帮助。

解决方法

所以我找到了发生这种情况的可能原因。

  1. 使用自定义文本编辑框或文本框的应用需要通过运行以下代码在文本选择菜单中手动添加按钮(More Details)
    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);
    }
}

  1. 这需要应用扫描现有包以获得 Process_text Intent 支持,但在 Android 11 中,我们无法访问所有已安装的包,而只能访问 androidManifest.xml 中 <queries> </queries> 内的包。

  2. 维基百科是一个著名的应用程序,推特一定把它添加到查询列表中,因此支持。