17

バックグラウンド

Android Mでは、アプリの外部からでも、選択したテキスト (ここにリンク) を処理する新しい方法が提供されます。テキスト選択は次のように処理できます。

ここに画像の説明を入力

アプリの外部から選択したテキストを処理できることはわかっています。Web ブラウザー (またはテキストを選択できる他の場所) に移動すると、「API デモ」アプリを使用して選択したテキストを処理できることがわかります。文章。

問題

その方法について多くの情報を見ることができません。

質問

  1. アプリの外部から選択したテキストを処理できるようにするには、コード (およびマニフェスト) に何を追加する必要がありますか?
  2. 選択を特定の種類のテキストに制限することは可能ですか? たとえば、テキスト タイプが有効な電話番号の場合にのみアプリを表示することを提案しますか?
4

2 に答える 2

16

まず、質問を明確にするために、M エミュレーターでテキストを強調表示すると、新しいフローティング アクション モードが表示されます。オーバーフロー アイコンをクリックすると、「API DEMOS」が表示されます。

M 開発者プレビュー エミュレーター

クリックすると、API Demo アプリからアクティビティが表示され、強調表示されたテキストが表示されます。

別の M Developer Preview エミュレーター

フィールドの値を置き換えてボタンをクリックすると、強調表示したものの代わりに置換テキストが挿入されます。


警告: 以下の説明は、API デモ コードと M Developer Preview ドキ​​ュメントを調べたものです。これは、M が realz に出荷される前に変更される可能性が非常に高いです。メートル法を使用しない場合は YMMV (メートル法を使用する場合は YKMV)。

テキストを受け取る問題のアクティビティはACTION_PROCESS_TEXT、アクションとしてサポートされIntentます。EXTRA_PROCESS_TEXTテキストEXTRA_PROCESS_TEXT_READONLYを保持するか、テキストが読み取り専用の場合は保持します。アクティビティは を介し​​て呼び出されますstartActivityForResult()。結果は、置換テキストとなるIntent独自の値を持つことができます。EXTRA_PROCESS_TEXT

したがって、特定の質問に:

アプリの外部から選択したテキストを処理できるようにするには、コード (およびマニフェスト) に何を追加する必要がありますか?

上記を参照。API Demos アクティビティ ( 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スパンを持つものについては?) を判断するための実験は行っていません。

選択を特定の種類のテキストに限定することは可能ですか? たとえば、テキスト タイプが有効な電話番号の場合にのみアプリを表示することを提案しますか?

ドキュメントを考えると、それは不可能のようです。そうは言っても、それは確かに合理的な考えです (たとえば、テキストが一致する必要があるマニフェストのメタデータを介して、正規表現または複数の正規表現を宣伝します)。

于 2015-05-28T22:48:39.687 に答える
0

Android Developers Blog のこの記事が関連している可能性があります。Google 翻訳オプションをオーバーフロー テキスト選択メニューに追加する方法が説明されています。

Android のテキスト選択動作を使用する Android アプリでは、この機能が既に有効になっているため、追加の手順を実行する必要はありません。アプリのカスタム テキスト選択動作を作成した開発者は、次の手順に従ってこの機能を簡単に実装できます。

PROCESS_TEXTインテント フィルター を持つすべてのパッケージ (例: - インストールされている場合) を PackageManager 経由でスキャンし com.google.android.apps.translate、アプリの TextView 選択に MenuItems として追加します。

パッケージ マネージャーにクエリを実行するには、最初に action を使用してインテントを作成し Intent.ACTION_PROCESS_TEXT、次にサポートされているアクティビティを取得して、取得したアクティビティごとにアイテムを追加し、インテントをアタッチしてアクションを起動します。

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);
    }
}
于 2015-12-13T09:32:15.593 に答える