2017-05-18 1 views
0

Android OでAccessibilityServiceを使用しようとしましたが、このサービスを作成しません。Android O:AccessibilityService

マニフェスト:

<service 
     android:name=".AccessService" 
     android:label="@string/app_name" 
     android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"> 
     <intent-filter> 
      <action android:name="android.accessibilityservice.AccessibilityService" /> 
     </intent-filter> 

     <meta-data 
      android:name="android.accessibilityservice" 
      android:resource="@xml/accessibility_service_config" /> 
    </service> 

XML構成:

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" 
        android:description="@string/app_name" 
        android:accessibilityEventTypes="typeAllMask" 
        android:accessibilityFlags="flagRequestFilterKeyEvents|flagIncludeNotImportantViews" 
        android:accessibilityFeedbackType="feedbackAllMask" 
        android:notificationTimeout="100" 
        android:canRetrieveWindowContent="true" 
        android:canRequestFilterKeyEvents="true" 
        android:settingsActivity="com.example.test.MainActivity" 
/> 

私は私の延長AccessibilityServiceクラスのすべてのメソッドのためのログ出力を追加しましたが、またのonCreateが呼ばれることはなかったです。私はAndroidの設定でサービスを有効にすることができますし、私は両方のボリュームボタンにバインドし、私は一緒に両方を押すと、彼はいつもこれが現在有効になっていると言います。それは、身体障害者やこれのようなものではありません。 Androidの[設定]ページには、そのアクティブが表示されます。

My AccessibilityServiceクラスにはログ出力のみがあります。このクラスでは何もしなかった。

私は何かを忘れましたか? Android Oに何が必要なの? 私はこのチュートリアルに基づいて試しました:https://developer.android.com/guide/topics/ui/accessibility/services.html

長押しボタンをキャッチしたいと思います。

答えて

1

サービスを作成していないと言っても、Android設定ページではアクティブと認識されていると言います。

Android Oで実行するためのアクセシビリティサービスを作成しようとしましたが、うまくいくようです。ここで

だけログに記録し、あなたのサービスの動作言うように、私のサービスです。

public class LoggingA11yService extends AccessibilityService { 

    @Override 
    public void onAccessibilityEvent(AccessibilityEvent event) { 
     Log.d("!!!", "onAccessibilityEvent: " + event); 
    } 

    @Override 
    public void onInterrupt() { 
     Log.d("!!!", "onInterrupt"); 
    } 

} 

それは(いくつかのプロパティが設定されているマニフェストにこのサービスを宣言し、XMLでそのための設定を提供する必要があります

<application> 

    <service android:name=".LoggingA11yService" 
     android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" 
     android:label="@string/accessibility_service_label"> 
     <intent-filter> 
      <action android:name="android.accessibilityservice.AccessibilityService" /> 
     </intent-filter> 
     <meta-data 
      android:name="android.accessibilityservice" 
      android:resource="@xml/accessibilityservice" /> 
    </service> 

    <activity ... 

</application> 

@xml/accessibilityservice

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" 
    android:accessibilityEventTypes="typeAllMask" 
    android:accessibilityFeedbackType="feedbackSpoken" 
    android:accessibilityFlags="flagDefault" 
    android:canRetrieveWindowContent="true" 
    android:description="@string/accessibility_service_description" 
    android:notificationTimeout="100" /> 
これは好ましいアプローチ)があるので、プログラムが、すべてはXMLを使用して構成されています

次に、[設定]> [アクセシビリティ]> [ログオンサービス]> [トグル]にナビゲートしてサービスを有効にするだけで、サービスを有効にする必要があります。ドキュメントが同じイベントを処理することができ、複数のサービスが存在する場合、それらはだけにイベントを送信しますと言う

05-21 10:34:25.848 15998-15998/com.novoda.androidskeleton D/!!!: 
onAccessibilityEvent: EventType: TYPE_WINDOW_STATE_CHANGED; 
EventTime: 113655863; PackageName: com.android.settings; 
MovementGranularity: 0; Action: 0 [ ClassName: com.android.settings.SubSettings; 
Text: [Label Logging A11y Service]; ContentDescription: null; 
ItemCount: -1; CurrentItemIndex: -1; IsEnabled: true; 
IsPassword: false; IsChecked: false; IsFullScreen: true; 
Scrollable: false; BeforeText: null; FromIndex: -1; ToIndex: -1; 
ScrollX: -1; ScrollY: -1; MaxScrollX: -1; MaxScrollY: -1; 
AddedCount: -1; RemovedCount: -1; ParcelableData: null ]; 
recordCount: 0 

注:私は私のデバイスなどを使用するよう

私は、出力logcatで見ることができますサービスが異なるタイプのフィードバックを提供する場合、すべてのサービス。それ以外の場合は、登録した最初のサービスがイベントを取得します - これをテストしている間に他のアクセシビリティサービスを無効にして、これがあなたのケースでないかどうかを確認します。

0

Hm?私はすでに答えを書いていた。たぶん間違った質問ですか?おっと...

もし私がそれが始まっていないと言えば、方法はありません。ログ出力なし、何もありません。 But: Android O Developer Previewのバグだったようです。ある日後、もう1つのOTA Updateがあり、それ以降はうまくいった。

悲しいことに、ディスプレイがオフの場合、これは呼び出されないようです。私は無効ディスプレイでもそれが必要です。

関連する問題