2017-02-20 6 views
0

他のアプリケーションのレイアウトを「スキャン」してボタンなどがあるかどうかを調べるアンドロイドアプリを作成します。 whatsappのような一部のアプリケーションでは、私はアクセシビリティを使用することが解決策になるかもしれませんが。 問題は、私がアクセシビリティを一度も使用したことがないことです。誰かがボタンを見つけるためにアプリのレイアウトを「スキャンする」方法を教えてください。 ありがとうございましたアクセシビリティの使用

+0

これはなぜ閉鎖されるのかわかりません。これを閉じようと投票した人が質問を誤解しているような気がします。 Android Accessibility Serviceの定型コードは大きな問題です。私は答えに取り組むだろう。私はいくつかのA11y Serviceの定型文を使ってgithub repoを投稿することを意味してきました。私に24時間を与える!あなたがそれを理解していないからといって、この質問を閉じないでください! – ChrisCM

答えて

0

あなたが探しているのは、アクセシビリティサービスです。アクセシビリティサービスの設定はやや複雑です。 LogCatにノード階層を記録するAccessibilityServiceを設定し、デフォルトのプロジェクト設定アクティビティを設定アクティビティとして設定したアクセス可能な定型コードのリポジトリを設定しました。ここではいくつかのハイライトがありますが、github reposを回答として投稿するのは嫌です。私は自分のライブラリをたくさん使っています。 CLogはロギングライブラリであり、AndroidAccessibilityUtilsはいくつかの共通ユーティリティ関数でノード情報をラップします。下のgithubリポジトリのbuild.gradleファイルで、依存関係の参照を見つけることができます。ここにいくつかのコードのハイライトがあります。

あなたのManifest.xmlファイルが活動とは大きく異なることになるだろうし、あなたのアプリケーションの要素で、このようなエントリが含まれている必要があります:あなたはアクセシビリティサービスのサブクラスを作成する必要が

<application .... > 
    ... 
    <service 
     android:name="com.moba11y.basicaccessibilityservice.BasicAccessibilityService" 
     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" /> 

    </service> 
    ... 
</application> 

ファースト:

public class BasicAccessibilityService extends AccessibilityService { 

    static { 
     CLog.initialize(BasicAccessibilityService.class.getSimpleName(), BuildConfig.DEBUG); 
    } 
    @Override 
    public void onAccessibilityEvent(AccessibilityEvent event) { 
     CLog.d(event.toString()); 

     switch (event.getEventType()) { 
      //On Gesture events print out the entire view heirarchy! 
      case AccessibilityEvent.TYPE_GESTURE_DETECTION_START: 
       CLog.d(A11yNodeInfo.wrap(getRootInActiveWindow()).toViewHeirarchy()); 

      default: { 
       //If the event has a source, let's print it out separately. 
       if (event.getSource() != null) { 
        CLog.d(A11yNodeInfo.wrap(event.getSource()).toViewHeirarchy()); 
       } 
      } 
     } 
    } 

    @Override 
    public void onInterrupt() { 
     CLog.e("Service Interrupted: Have never actually had this happen."); 
    } 
} 

これはハイライトの大部分です。また、Manifest XMLファイルの変更で参照されているように、プロパティを持つ "service_config" XMLも必要です。 GitHubのオープンソースリポジトリには、より詳細な情報と、妥当なスタローラポイントがあります。

https://github.com/chriscm2006/Android-Accessibility-Service-Boilerplate

関連する問題