AccessibilityService
正しく機能し、onAccessibilityEvent()
各イベントで呼び出されるを作成しました。私がやりたいことはEditText
、サービスからブラウザーにデータを入力することです。を使用して、通常のアプリでこれを機能させることができますAccessibilityNodeInfo.ACTION_PASTE
。ただし、これは Chrome などのブラウザー内からの s では機能しませんEditText
が、それらはまったく同じように検出されるように見えます。
サービスの設定方法は次のとおりです。
protected void onServiceConnected() {
super.onServiceConnected();
Log.v(TAG, "onServiceConnected");
_("CONNECTED");
toast("service connected");
AccessibilityServiceInfo info = new AccessibilityServiceInfo();
info.flags = AccessibilityServiceInfo.DEFAULT |
AccessibilityServiceInfo.FLAG_RETRIEVE_INTERACTIVE_WINDOWS |
AccessibilityServiceInfo.FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY |
AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS |
AccessibilityServiceInfo.FLAG_REPORT_VIEW_IDS;
info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
setServiceInfo(info);
}
そして、私がイベントをどのように扱うか:
@Override
public void onAccessibilityEvent(final AccessibilityEvent event) {
_("//////////////////onAccessibilityEvent");
final AccessibilityNodeInfo source = event.getSource();
if (source == null) {
return;
}
AccessibilityNodeInfo source = event.getSource();
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", "MyData");
clipboard.setPrimaryClip(clip);
source.performAction(AccessibilityNodeInfo.ACTION_PASTE);
}
以下を使用して、マニフェストから xml ファイルにさらにオプションを定義しました。
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data android:name="android.accessibilityservice" android:resource="@xml/access" />
これはすべて、Chrome とは別に動作するようEditText
です。何も表示されません。他のオプションはありますか? LastPassは何とかそれを行うようです:-)