10

AndroidAccessibilityServiceでは他のアプリEditTextフィールドに貼り付けることができますが、ブラウザtestfields(エミュレータのデフォルト ブラウザまたは Samsung deault ブラウザ) では機能せず、エラーがスローされます。

封印されていないインスタンスでこのアクションを実行することはできません。

いくつかのシングルアップテキストフィールドを備えたAndroid chromeブラウザでは、すべてのテキストフィールドでは機能しません。

 @Override
public void onAccessibilityEvent(AccessibilityEvent event) {

    AccessibilityNodeInfo source = event.getSource();
    if (source != null && ( event.getEventType() == AccessibilityEvent.TYPE_VIEW_FOCUSED ) ) {
            // || event.getEventType() == AccessibilityEvent.TYPE_VIEW_CLICKED ) &&
            //event.getClassName().equals("android.widget.EditText")
            //) {
        ctx = getApplicationContext();
        ClipboardManager clipboard = (ClipboardManager) ctx.getSystemService(Context.CLIPBOARD_SERVICE);
        ClipData clip = ClipData.newPlainText("label", "XYZ");
        clipboard.setPrimaryClip(clip);
        source.performAction(AccessibilityNodeInfo.ACTION_PASTE); 
        //Not Working, always return false.

        //Tried with other options
        Bundle argumentsTest = new Bundle();
        argumentsTest.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, "Bundle Test Data");
        source.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT,argumentsTest )
        // Not Working, throw java.lang.IllegalStateException exception
        //Message: "Cannot perform this action on a not sealed instance"
    }
}   
4

1 に答える 1

7

自分がやろうとしていると思うことをやろうとしているとは信じていません。

accessibilityNodeInfo の「テキスト」を設定すると、ユーザー補助サービスに関連するオブジェクトのテキスト プロパティが変更されます。これは、accessibilityNodeInfo オブジェクトが参照する EditText ボックスのテキストを変更するという意味ではありません。ユーザー補助サービスがこのオブジェクトを取得するまでに、2 つのオブジェクトは互いに完全に分離されています。コードが正常に実行されたとしても、期待する結果は得られません。さて、このアクションを実行できない理由については、これを知っていれば明らかです。アクセシビリティ サービスがノードを変更できるようにすることは、あまり意味がありません。したがって、それらは封印されます (これは、定数の実行時の強制と考えてください)。アクセシビリティ ノードは、その有効期間のさまざまな時点で封印および封印解除されます。封印されていないノード情報にアクセスできるフレームワークの部分は、View クラスとプライベート API です。アクセシビリティ サービス関連のタスクはすべて、封印された読み取り専用インスタンスを処理することになります。

元のソリューションが機能しない理由については、十分な情報がないと思います。「ACTION_PASTE」アプローチは (ほぼ) 正しいアプローチですが、Web ブラウザーでこれを行うと、多くの問題が発生します。ブラウザのバージョン、Android のバージョン、デバイスのバージョン、ウェブサイトなどすべてが役割を果たします。特に、セットアップが新しい WebView を使用しないほど古い場合 (WebKit の古いバージョンに基づく奇妙な埋め込みモバイル WebView の古い 4.+ アプローチではなく、純粋なクロム WebView であり、現在は更新されません)。少なくとも Android 5.0 を使用して、最新の Nexus デバイスでコードをテストし、コードが機能するかどうかを確認することをお勧めします。これができない場合は、セットアップのバージョン情報を報告してください。すでに利用している場合は、どのウェブサイトを利用していますか?

于 2015-09-28T18:59:39.997 に答える