我正在開發一個像VoiceAccess應用程序的應用程序。使用輔助功能服務,我可以執行頂級活動(第三方應用程序)上的所有點擊。但是我面臨着ListItem點擊的問題。我正在嘗試FaceBook應用程序的這個代碼。下面是我的代碼。誰可以幫我這個事。如何執行其他應用程序列表項點擊使用無障礙服務,如語音訪問應用程序?
public class MyService extends AccessibilityService {
/**/
private SharedPreferences S_PREF;
private SharedPreferences.Editor editor;
private static final String TAG = MyService.class
.getSimpleName();
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
clickPerform(getRootInActiveWindow(), 0);
}
public void clickPerform(AccessibilityNodeInfo nodeInfo, final int depth) {
if (nodeInfo == null) return;
List<AccessibilityNodeInfo> list = nodeInfo
.findAccessibilityNodeInfosByViewId("com.facebook.katana:id/bookmarks_tab");
for (AccessibilityNodeInfo node : list) {
Log.i(TAG, "ViewID-: bookmarks_tab " + node.getChild(0));
if (S_PREF.getBoolean("fb_menu", false)) {
editor.putBoolean("fb_menu", false);
node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
}
List<AccessibilityNodeInfo> list2 = nodeInfo
.findAccessibilityNodeInfosByViewId("com.facebook.katana:id/bookmarks_list");
for (AccessibilityNodeInfo node2 : list2) {
if (node2.getChild(0) != null)
if (S_PREF.getBoolean("fb_scroll_down", false)) {
editor.putBoolean("fb_scroll_down", false);
node2.performAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
}
}
editor.commit();
for (int i = 0; i < nodeInfo.getChildCount(); ++i) {
clickPerform(nodeInfo.getChild(i), depth+1);
}
}
@Override
public void onInterrupt() {
}
protected void onServiceConnected() {
S_PREF = getSharedPreferences("S_PREF", Context.MODE_PRIVATE);
editor = S_PREF.edit();
AccessibilityServiceInfo info = new AccessibilityServiceInfo();
info.flags = AccessibilityServiceInfo.DEFAULT;
info.eventTypes = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED | AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED;
info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
setServiceInfo(info);
Toast.makeText(getApplicationContext(), "onServiceConnected", Toast.LENGTH_SHORT).show();
}
}
下面是VoiceAccess屏幕。 當用戶說任何號碼,然後將執行特定的項目點擊。
我能夠獲得7,8,9,10事件,但從11起,我沒有單獨獲取列表項。我的代碼只返回listview標識。
在此先感謝....
「_but我現在面臨的問題與列表項clicks_」至少,你需要解釋一下什麼是「問題」是......即**(a)**正是你所做的事(我會說_11_20的數字,但要明確); **(b)**正是你期望/希望它會做的;和**(c)**正是它做了什麼(如果這是「沒有」,明確地說)。 – TripeHound
的問題是,我能夠得到listview id,但沒有列出項目ID /列表大小等。如果我們想要執行項目點擊,我們必須知道列表項目的位置或確切的視圖。所以只有我們可以執行選定的項目點擊。我不理解如何獲取該列表項視圖。在上面的圖像,如果我們說11特定項目點擊像instagram在瀏覽器等打開像這樣我必須以編程方式執行... 感謝您的響應... –
你有沒有找到一個解決方案呢?我面臨同樣的問題 –