2012-09-23 1 views
13

通知が表示されたときにいつでもアプリを検出しようとしています。私は設定アプリでそれを有効にして、onServiceConnectedが呼び出されますが、通知を作成するか、Gmailのアプリケーションから電子メールを受信すると何も起こりません。onAccessibilityEventは呼び出されません。Androidアクセシビリティサービスで通知を検出する

Androidのマニフェスト:任意の助け

package com.test.slide; 

import android.accessibilityservice.AccessibilityService; 
import android.accessibilityservice.AccessibilityServiceInfo; 
import android.view.accessibility.AccessibilityEvent; 

public class NotificationService extends AccessibilityService { 
@Override 
public void onAccessibilityEvent(AccessibilityEvent event) { 
    System.out.println("onAccessibilityEvent"); 
    if (event.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) { 
     System.out.println("notification: " + event.getText()); 
    } 
} 
@Override 
protected void onServiceConnected() { 
    System.out.println("onServiceConnected"); 
    AccessibilityServiceInfo info = new AccessibilityServiceInfo(); 
    info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED; 
    info.notificationTimeout = 100; 
    info.feedbackType = AccessibilityEvent.TYPES_ALL_MASK; 
    setServiceInfo(info); 
} 

@Override 
public void onInterrupt() { 
    System.out.println("onInterrupt"); 
} 
} 

NotificationService.java

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.test.slide" 
android:versionCode="1" 
android:versionName="1.0"> 
<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="15"/> 
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 
<uses-permission android:name="android.permission.GET_TASKS"/> 
<application android:label="Slide" 
    android:icon="@drawable/ic_launcher" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".Settings" 
     android:label="Slide"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 
      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".Tools" 
     android:label="Slide" 
     android:theme="@android:style/Theme.Translucent.NoTitleBar"> 
    </activity> 
    <service android:name=".LocalService"/> 
    <service android:name=".NotificationService" 
     android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" 
     android:label="Slide" 
     android:enabled="true" 
     android:exported="false"> 
     <intent-filter> 
      <action android:name="android.accessibilityservice.AccessibilityService"/> 
     </intent-filter> 
    </service> 
</application> 

感謝。

+0

はあなたが解決策を見つけました

チェックを働くこと?私はまったく同じ問題を抱えています。 –

+0

alanvの答えが私のために働いた – ng93

+0

あなたはどのシステムバージョンをプログラミングしていますか? ICS?ゼリービーン? –

答えて

21

マニフェストにaccessibility-serviceメタデータタグが定義されていないと、Android 4.0以降のアクセシビリティサービスが異常に動作することがあります。以下の例のように、メタデータを定義してみてください。 setServiceInfo()を使用して、4.0より前のデバイスとの下位互換性を維持する必要があります。

また、「すべて」を使用するのではなく、サービスに固有のフィードバックタイプを指定することをお勧めします。

のAndroidManifest.xml

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

のres/XML/accessibilityservice.xml

<?xml version="1.0" encoding="utf-8"?> 
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" 
    android:accessibilityEventTypes="typeNotificationStateChanged" 
    android:accessibilityFeedbackType="feedbackAllMask" 
    android:notificationTimeout="100" /> 

あなたfeedbackType中にエラーが発生しました。下に訂正。それでも、より具体的なフィードバックタイプの使用を検討してください。

NotificationService.java

@Override 
protected void onServiceConnected() { 
    AccessibilityServiceInfo info = new AccessibilityServiceInfo(); 
    info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED; 
    info.feedbackType = AccessibilityServiceInfo.FEEDBACK_ALL_MASK; 
    info.notificationTimeout = 100; 
    setServiceInfo(info); 
} 
+0

XMLとコードで 'serviceInfo'を定義しています。 xmlがマニフェストで定義されているため、AccessibilityServiceInfoのコード部分を省略することができます。 –

+3

それどころか、ICS前のデバイスとの互換性のために、両方の場所で定義する必要があります。 – alanv

+0

ありがとう!ありがとう!ありがとう! – Antonio

4

AccessibilityServiceは、システムイベントにアクセスするために、設定>ユーザー補助の許可を持っているために必要な使用してアプリ。 設定の許可を許可します。これは、このリンク

accessibility service is not started

+0

すべてのことを試してみましたが、私は設定から​​有効にする必要があります –

関連する問題