2012-03-12 5 views
4

Я пытаюсь написать очень простой сервис технической поддержки Android, который показывает сообщение и вибрирует, когда возникает какое-либо уведомление. Я пробовал проверить его, отправив электронное письмо на свой телефон (я подумал, что будет показывать какое-то уведомление). Но я не видел никаких уведомлений.Служба доступности для 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

Я добавил мета элемент данных внутри службы тега

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

И в файле XML-ресурсов У меня есть

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

Доступность Сервис избыточна для ваших целей, вы должны использовать NotificationListenerService. NotificationListenerService намного проще реализовать и безопаснее для пользователей (соображения конфиденциальности).

0

Другим способом настройки службы доступности является переопределение метода OnServiceConnected() вашего AccessibilityService из кода 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); 
    } 

Эталонные

Смежные вопросы