2017-02-14 18 views
0

これはしばらくの間続きました...AccessibilityServiceでTouchExplorationModeをバイパスする方法はありますか?

私はAccessibilityService私は画面の内容を読むために使用しています。このコンテンツの一部は、ListViewに隠されています。 AccessibilityServiceでTouchExplorationModeを有効にし、listViewの項目をタッチするとコンテンツが表示されます。

ただし、これを有効にすると、すべてのシングルタッチジェスチャーがホバージェスチャーとして選択されます。このオプションをプログラムで有効または無効にすることはできません。ホバーイベントをタッチイベントに変換する方法はありますか?

私はこれを見つけましたconverting hover to touch using Viewsしかし、私は同じことを要求しますが、表示がないAccessibilityServiceからです。

ありがとうございます。

答えて

0

TouchExplorationModeをオンにして、ホバーイベントを直接アプリケーションウィンドウに渡すことはできません。それは不可能。しかし、TouchExplorationModeをプログラムで有効にしたり無効にしたりすることはできないと思うのですか?これは間違いです。あなたのやり方は次のとおりです。

public class YourA11yService extends AccessibilityService { 

    private void enableTouchExploration() { 
     AccessibilityServiceInfo info = mInstance.getServiceInfo(); 

     info.flags |= AccessibilityServiceInfo.FLAG_REQUEST_TOUCH_EXPLORATION_MODE; 

     mInstance.setServiceInfo(info); 
    } 

    private void disableTouchExploration() { 
     AccessibilityServiceInfo serviceInfo = mInstance.getServiceInfo(); 

     serviceInfo.flags &= ~AccessibilityServiceInfo.FLAG_REQUEST_TOUCH_EXPLORATION_MODE; 

     mInstance.setServiceInfo(serviceInfo); 
    } 

} 

ただし、このコンテンツを見つけるためにタッチ探索モードは必要ありませんが、現在のウィンドウコンテンツ内のリストビューを見つけるだけです。あなたはそれに触れるためにそれに触れなければならないのはなぜですか?

EDIT: のAndroidManifest.xml

... 
    <service 
     android:name=".A11yService" 
     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/service_config" /> 

    < 
    ... 

ServiceConfig.xml(R.xml.service_config)

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" 
    ... 
    android:canRequestTouchExplorationMode="true" 
    android:accessibilityFlags="flagIncludeNotImportantViews" 
    .../> 

注:私は、足場の多くは、および他の本質的な特性を削除しました彼がこの作業をするために必要な最小限の設定でそれを煮沸してください。明らかに、これらのファイルの他の重要な側面があります!

+0

こんにちはクリス、提案していただきありがとうございますが、動作しません。 それは、メタデータに設定されることなく、このフラグを設定すると、「JELLY_BEAN_MR1よりも高いAPIバージョン」 見るには機能しません。https://developer.android.com/reference/android/accessibilityservice/AccessibilityServiceInfo.html#FLAG_REQUEST_TOUCH_EXPLORATION_MODE また、アクセシビリティサービスから画面上のすべての情報を表示することはできません。これの例はリストビュー要素です - あなたはこれを隠すことができます。私は現時点でこのリンクを見つけることができませんが、特定の要素(???)を隠すことができると確信しています – Rhdev

+0

UIを見ている - すべてのソースコードとその子供がいる場合は、それらを印刷して表示する。このメソッドを使用すると、それはリストビューになりますが、それ以上進みません。 – Rhdev

+0

要素が不足しているためにan anserが更新されました。コードまたはXMLにフラグflagIncludeNotIMportantViewsを含める必要があります。 JEELY_BEAN_MR1に関しては、あなたは誤解しています。フラグを動的に適用することはできます。 XML構成とコードには違いはありません。 AOSPコードを調べると、xml configはサービス設定を読み込み、私が提供したコード行を適用します。とてもリテラルなものです。しかし、あなたが必要とするのは、そのフラグを許可するマニフェスト/サービス設定の行です。私はこれを答えに加えました。 – ChrisCM

関連する問題