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

Gau*_*rma 6 java android 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>
Run Code Online (Sandbox Code Playgroud)

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

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

<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>
Run Code Online (Sandbox Code Playgroud)

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

任何线索都会有帮助。

Gau*_*rma 3

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

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

Run Code Online (Sandbox Code Playgroud)
  1. 这需要应用扫描现有包以获取 Process_text 意图支持,但在 Android 11 中,我们无法访问所有已安装的包,只能访问<queries> </queries>androidManifest.xml 中的包。

  2. 维基百科是一个著名的应用程序,Twitter 一定已将其添加到查询列表中,因此获得了支持。

  • 应该在哪里调用“onInitializeMenu”? (2认同)