2014-04-16 5 views
8

Ich entwickle eine Android-App, wo ich Text zu fokussierten EditText Feld anderer Anwendungen senden muss.AccessibilityNodeInfo - Text senden

Ich habe es in API level 18 und oben unter Verwendung AccessibilityService getan, wenn ich die EditText finde, füge ich die Daten von ClipBoard ein. Hier ist der Code,

public class TestService extends AccessibilityService { 

    @Override 
    public void onAccessibilityEvent(AccessibilityEvent event) { 
     AccessibilityNodeInfo source = event.getSource(); 
     if (source != null && event.getEventType() == AccessibilityEvent.TYPE_VIEW_CLICKED && event.getClassName().equals("android.widget.EditText")) { 
       ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); 
       ClipData clip = ClipData.newPlainText("label", "TEST DATA"); 
       clipboard.setPrimaryClip(clip); 
       source.performAction(AccessibilityNodeInfo.ACTION_PASTE); 
     } 
    } 
} 

Aber AccessibilityNodeInfo.ACTION_PASTE ist in API Level 18 und höher zur Verfügung.

Können wir dasselbe in API Level < 18 erreichen?

Ich lese in einigen Blogs, dass es mit InputMethodService getan werden kann, wo wir unsere eigene Tastatur erstellen und Text über diese Soft-Tastatur senden. Ich habe nicht viel davon verstanden ...

kann mir jemand dabei helfen.

+0

Amith, haben Sie herausfinden, wie ACTION_PASTE in API-Ebene unter 18 zu erreichen? – androidGuy

+0

ab sofort gibt es keine Möglichkeit, es zu tun – amithgc

Antwort

0

Man könnte die Ansicht erhalten, die den aktuellen Fokus hat:

public View getCurrentFocus() { 
    return mWindow != null ? mWindow.getCurrentFocus() : null; 
} 

Und dann den Text einrichten:

editTextObject.setText(CharSequence) 
+0

Ich muss Text zum fokussierten EditText Feld anderer Anwendungen senden. Wie bekomme ich die Aktivitätsinstanz? nicht möglich, richtig .. – amithgc

1

Sie können uns e ACTION_PASTE von API 14, aber Sie haben AccessibilityRecordCompat anrufen und AccessibilityNodeInfoCompat wie dort:

AccessibilityRecordCompat record = AccessibilityEventCompat.asRecord(event); 
AccessibilityNodeInfoCompat source = record.getSource(); 
source.performAction(AccessibilityNodeInfo.ACTION_PASTE); 
Verwandte Themen