3

サードパーティのアプリケーションに自動ログイン機能を実装しようとしています。

ログインページでユーザー名/パスワードをコピーして貼り付けようとしています。それを実現するために、私は Android アクセシビリティ サービスを使用しています。

さまざまなデバイスにテキストを貼り付けることができます。しかし、Samsung デバイスでは、ユーザー名/パスワードが間違った入力フィールドに貼り付けられます。

ログは、ユーザー名/パスワードが期待どおりにコピーされていることを示しています。しかし、貼り付け中に間違ったテキストが貼り付けられます。

これが私がすることです:

private ClipboardManager mClipboardManager;
mClipboardManager = (ClipboardManager) getApplication().getApplicationContext().getSystemService(Context.CLIPBOARD_SERVICE);

ClipData clip = ClipData.newPlainText("", textToPaste);
mClipboardManager.setPrimaryClip(clip);
nodeInfo.performAction(AccessibilityNodeInfo.ACTION_PASTE);
clip = ClipData.newPlainText("", "");
mClipboardManager.setPrimaryClip(clip);

clip = ClipData.newPlainText("", textToPaste2);
mClipboardManager.setPrimaryClip(clip);
nodeInfo.performAction(AccessibilityNodeInfo.ACTION_PASTE);
clip = ClipData.newPlainText("", "");
mClipboardManager.setPrimaryClip(clip);

解決策を見つけるのを手伝ってもらえますか? 正しいテキストを貼り付けるにはどうすればよいですか?

4

1 に答える 1

2

私もこの問題を抱えていましたが、ここでも未解決の質問であり、適切に対処されていないことに気付きました。この問題は、Samsung 独自のクリップボードと、それを操作するためのアクセシビリティの実装方法との競合状態のようです。機能的ですが、それほどきれいではないソリューションが機能しています:

if (Build.MANUFACTURER.toString().equals("samsung")) {
    Handler handler = new Handler();
    final Runnable runnable = new Runnable() {
        @Override
        public void run() {
            getCurrentNode().performAction(AccessibilityNodeInfo.ACTION_PASTE);
        }
    };
    handler.postDelayed(runnable, 100);
} else {
    getCurrentNode().performAction(AccessibilityNodeInfo.ACTION_PASTE);
}

したがって、基本的には、ペーストを行う前に、クリップボードが安定するまで少し (100ms、YMMV) 待ちます。これが完璧ではないことは認めますが、これは API 18 以降で機能します。

API 21+ のもう 1 つのオプションはAccessibilityNodeInfo.ACTION_SET_TEXT、貼り付けとは対照的に (明らかにテキストのみ)、正しいテキストをそのように挿入することです。これがどのように機能するかの例を次に示します。

Bundle arguments = new Bundle();
arguments.putString(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, "node text plus pasted text");
getCurrentNode().performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments);

注:上記はカーソルを管理しないため、常にテキストフィールドの最後に配置されます。とバンドルでカーソルを管理できますAccessibilityNodeInfo.ACTION_SET_CURSOR(上記のテキストの設定と同様の方法で)

于 2015-04-17T19:49:25.970 に答える