は、だから私は新しい午前onAccessibilityEvent
で遊んや他のアプリからの画面上にあるTextViews
を読んでいる作業とそれは素晴らしい取り組んでいるが、今私はいくつかをクリックしてAccessibilityNodeInfo.ACTION_CLICK
を使用することができるようにしたくありませんこれらの。私の問題は、他のアプリからのTextView
のほとんどがクリック可能になっていませんが、クリック可能なandroid.widget.LinearLayout
またはandroid.widget.FrameLayout
のポップアップが表示されています。しかし、私のコードはそれらをクリックしていないようです。助言がありますか?AccessibilityNodeInfo.ACTION_CLICK
public class AutoService extends AccessibilityService
{
@TargetApi(16)
@Override
public void onAccessibilityEvent(AccessibilityEvent event)
{
AccessibilityNodeInfo source = event.getSource();
myAdapter.processEvent(source);
}
}
public class myAdapter
{
public static void processEvent(final AccessibilityNodeInfo source)
{
final StringBuilder sb = new StringBuilder();
processSubEvent(source, 0, sb);
final String string = sb.toString();
if (string == null)
{
return;
}
clickScreen(source, string.toLowerCase());
}
private static void processSubEvent(final AccessibilityNodeInfo source, final int n, final StringBuilder sb) {
for (int i = 0; i < n; ++i) {
sb.append("\t");
}
if (source != null)
{
sb.append(source.getText());
sb.append("\n");
final int childCount = source.getChildCount();
for (int i = 0; i < childCount; i++)
{
AccessibilityNodeInfo child = source.getChild(i);
processSubEvent(child, n + 1, sb);
if (child != null)
{
child.recycle();
}
}
}
}
private static void clickScreen(final AccessibilityNodeInfo source, final String text)
{
List<AccessibilityNodeInfo> list = source.findAccessibilityNodeInfosByText(text);
for (final AccessibilityNodeInfo node : list)
{
node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
}
}
私はArrayListに新しいです、どのように私はクリック可能に格納しますそのリスト内のノードを削除し、後でそれを呼び戻しますか? – Jayce
@Jayce私は答えを変更し、見て: 'if(answer.isHelpfull()){ answer.accept(true); } else { answer.addComment( "あなたのお問い合わせ"); } ' – FarBen
clickableのリストを反復してクリックするのは大まかなアイデアです。おそらく、この関数の呼び出しごとに1つだけクリックするべきです。連続したボタンを数ミリ秒間隔でクリックするのは悪い考えです。最初のそのような要素がクリックされた後でスクリーンコンテンツを無効にして、他のノードを無意味にクリックするようにするのは、よくあることです。そうでなければ、この答えは完璧です。この問題が解決されれば、アップアップします。 – ChrisCM