2017-09-28 24 views
2

私はAccessibilityServiceを正常に動作させていましたが、何らかの理由で開発中に動作を停止しました。私はその理由を見つけることができないようです。私のコードを見て、なぜ動作していないのかを教えてください。アンドロイドアクセシビリティサービスが突然イベントの起動を停止しました

public class MyServicee extends AccessibilityService { 

public static final String TAG = "volumeMaster"; 

@TargetApi(Build.VERSION_CODES.KITKAT) 
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) 
@Override 
public void onAccessibilityEvent(AccessibilityEvent event) { 

    List<CharSequence> eventText; 

    Log.v(TAG, "***** onAccessibilityEvent"); 

    final int eventType = event.getEventType(); 

    switch (eventType) { 

     case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED: 

      break; 
    } 

    if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_CLICKED) { 

    } 



} 

private String processUSSDText(List<CharSequence> eventText) { 
    for (CharSequence s : eventText) { 
     String text = String.valueOf(s); 
     if (true) { 
      return text; 
     } 
    } 
    return null; 
} 

@Override 
public void onInterrupt() { 
    Log.v(TAG, "***** onInterrupt"); 
} 


@TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
@Override 
public void onServiceConnected() { 
    Log.v(TAG, "***** onServiceConnected"); 

    AccessibilityServiceInfo info = getServiceInfo(); 
    info.eventTypes = 
      AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED 
        | AccessibilityEvent.TYPE_VIEW_CLICKED 
        | AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED; 

    info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC; 
    info.packageNames = new String[]{"com.whatsapp"}; 
    info.flags = AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS; 
    setServiceInfo(info); 
    super.onServiceConnected(); 
} 

} 

はここでマニフェストの関連する部分だ:

<service android:name=".MyServicee" 
     android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" 
     android:enabled="true"> 
     <intent-filter> 
      <action android:name="android.accessibilityservice.AccessibilityService" /> 
     </intent-filter> 
     <meta-data android:name="android.accessibilityservice" 
      android:resource="@xml/myservice" /> 
    </service> 

はここmyserviceconfig.xmlです:

<accessibility-service 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:accessibilityEventTypes="typeViewClicked|typeNotificationStateChanged|typeWindowStateChanged" 
android:accessibilityFeedbackType="feedbackAllMask" 
android:canRetrieveWindowContent="true" 
android:accessibilityFlags="flagIncludeNotImportantViews|flagRequestFilterKeyEvents" 
android:notificationTimeout="1" 
android:packageNames="com.whatsapp" 
android:settingsActivity="@string/app_name" /> 

コードは、ユーザーが通話録音サービスを開始したときを検出しようとします。

答えて

0

あなたの構成にいくつかの問題があります:あなたのonServiceConnected機能で

まず、あなたは、システム構築のアクセシビリティ情報を上書きします。

AccessibilityServiceInfo info = getServiceInfo(); 
info.eventTypes = 
     AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED 
       | AccessibilityEvent.TYPE_VIEW_CLICKED 
       | AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED; 

info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC; 
info.packageNames = new String[]{"com.whatsapp"}; 
info.flags = AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS; 
setServiceInfo(info); 
super.onServiceConnected(); 

このコードブロック全体は不要であり、serviceConfig XMLファイルの同様の行ですべて実行されます。省略することはできませんが、省略することはできません。設定に問題がありますが、これ以外のものは問題ありません。あなたのservice_config xmlファイルをさせるといえば今

は、自分自身のために話す、のがここでのラインのカップルの話をしましょう:1つのMSの

android:notificationTimeout="1" 

通知タイムアウトは、本質的に無価値です。

android:packageNames="com.whatsapp" 

本当にアクセシビリティイベントを1つのアプリケーションに限定したいですか?

android:settingsActivity="@string/app_name" 

settingsActivityプロパティでは、これは絶対に無効な値です。設定アクティビティーは、アプリケーション内のアクティビティー・クラスの名前でなければなりません。 EX:com.yourpackage.SettingsActivity。このプロパティは安全に省略できます。

この情報以外に、完全に無効な状態でアクセシビリティサービスを取得するのはかなり簡単です。デーモンサービスをバックグラウンドで実行し、サービスフォームを開始しますが、実際には生産的なことはしないでください。この問題を解決する唯一の方法は、デバイスを再起動することです。パッケージをアンインストールしてから、デバイスを再起動してパッケージを再インストールする必要がある場合もあります。

+0

あなたのリプレイのためにありがとうございます..... @クリスCM ..........しかし、問題は、コードが例外をスローすると、サービスは、残念なことに停止するwhats-appの後に12秒間完璧に動作します。だから私にいくつか提案してください。 – Secret

+0

サービスで例外がスローされている場合は、質問付きのスタックトレースを投稿する必要があります。スタックトレースよりも問題のデバッグに役立つ情報はありません。 – ChrisCM

関連する問題