2012-03-12 3 views
4

私は非常に基本的なアンドロイドのアクセシビリティサービスを作成しようとしています。メッセージは通知を受け取ったときに振動します。私は自分の電話で自分自身でメールを送信してテストしようとしました(私はそれが何らかの通知を表示すると考えました)。しかし、私は通知を見ていない。Androidのアクセシビリティサービス

マイサービスコードは、私はサービスが実行されていることを確認したと、私は電話のアクセシビリティメニューでそれを有効にしている

public class NotifierService extends AccessibilityService { 

    @Override 
    public void onAccessibilityEvent(AccessibilityEvent evt) { 
    Toast.makeText(this, "Got event from " + evt.getPackageName(), Toast.LENGTH_SHORT) 
      .show(); 
    Vibrator v = (Vibrator) getSystemService(VIBRATOR_SERVICE); 
    v.vibrate(new long[] { 0, 250, 250, 250, 250, 250, 250, 250, 250 }, -1); 
    } 

    @Override 
    public void onInterrupt() { } 
} 

のように見えます。そして、このようなマニフェストルックス(一部は関連していないこと削除されます):

<uses-permission android:name="android.permission.VIBRATE" /> 
<application> 
    <activity 
     android:name=".MyActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <service android:name=".NotifierService" android:enabled="true" > 
     <intent-filter> 
      <action android:name="android.accessibilityservice.AccessibilityService" /> 
     </intent-filter> 
    </service> 
</application> 

MyActivityは、開始/サービスを停止するためのボタンでちょうど活動です。

+2

あなたは ''要素を持っていないので、あなたが呼び出している 'setServiceInfo()'どこか、あたり[ドキュメント「AccessibilityService'」(http://developer.android.com/reference/android/accessibilityservice/AccessibilityService.html)?私はこれらのいずれかを実装していないので、私はちょうど教育上の推測をしています。 – CommonsWare

+0

ああ、そうではありません。私はそれを試し、何が起こるか見てみましょう。 –

+0

それは、ありがとう、それをしました。 –

答えて

4

私はアクセシビリティサービスがあなたの目的のためにやり過ぎである

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" 
         android:accessibilityEventTypes="typeNotificationStateChanged" 
         android:accessibilityFeedbackType="feedbackAllMask" 
         android:notificationTimeout="100" /> 
1

、あなたがNotificationListenerServiceを使用する必要があります私が持っているサービスタグ

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

とXMLリソースファイル内の内側のメタデータ要素を追加しました。 NotificationListenerServiceは、実装がずっと簡単で、ユーザーにとってより安全です(プライバシー上の理由から)。

0

アクセシビリティサービスを設定するもう1つの方法は、AccessibilityServiceOnServiceConnected()メソッドをJavaコードからオーバーライドすることです。

@Override 
    protected void onServiceConnected() { 
    AccessibilityServiceInfo info = getServiceInfo(); 
    info.packageNames = new String[] 
     { 
      "com.packagename1","com.packagename2" 
     }; 
    info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED; 

    this.setServiceInfo(info); 
    } 

リファレンス

関連する問題