2015-12-25 2 views
2

Я использовал службу специальных возможностей в android для обнаружения приложения переднего плана.Использование службы специальных возможностей Android

Я хочу слушать 2 доступных доступность событий

TYPE_VIEW_TEXT_CHANGED

TYPE_WINDOW_STATE_CHANGED

Я хочу слушать все window state change событий, что работает, но для второго события я хочу прослушать view_text_changed событие всего 1-2 приложений и не всех.

Я прочитал &, попробовал параметр android:packageNames в xml, но тогда он наложит ограничение на событие window_state_changed.

Есть ли другой способ сделать это?

ответ

1

К сожалению, не существует способа указать интересные имена пакетов для указанных событий доступности. Вы должны просто использовать AccessibilityEvent#getPackageName для фильтрации интересующих вас пакетов.

1

Предполагая, что у вас есть настройка AndroidManifest, чтобы узнать AccessibilityService, я добавляю другой требуемый код здесь, на случай, если кто-то хочет получить прямой ответ. Файл конфигурации службы

Доступность:

<?xml version="1.0" encoding="utf-8"?> 
<accessibility-service xmlns:android= "http://schemas.android.com/apk/res/android" 
    android:description="@string/accessibility_service_description" 
    android:accessibilityEventTypes="typeWindowStateChanged|typeViewTextChanged" 
    android:accessibilityFlags="flagDefault" 
    android:accessibilityFeedbackType="feedbackSpoken" 
    android:notificationTimeout="100" 
    android:canRetrieveWindowContent="true" 
    android:settingsActivity="com.example.android.accessibility.ServiceSettingsActivity"/> 

Обратите внимание на android:accessibilityEventTypes являются по мере необходимости. Если вы ограничиваете пакет в xml, вы не получите TYPE_WINDOW_STATE_CHANGED, как правильно указано в вопросе.

Таким образом, вам также необходимо внести изменения в вашу реализацию AccessibilityService.

public class VoiceAccessibilityService extends android.accessibilityservice.AccessibilityService { 
    private static String TAG = VoiceAccessibilityService.class.getName(); 

    @Override 
    public void onAccessibilityEvent(AccessibilityEvent event) { 

     if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED && event.getPackageName().equals("Your package names")) { 
      Logger.d(TAG + " SHOW " + event.toString()); 

     } 
    } 

    @Override 
    public void onInterrupt() { 
     Logger.d(TAG + " interrupt"); 
    } 
} 

Надеюсь, это поможет!

Смежные вопросы