2012-03-12 100 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 2012-03-12 22:43:09

+0

啊,我不是。我會試試看看會發生什麼。 – 2012-03-12 22:56:00

+0

這樣做,謝謝。 – 2012-03-12 23:00:16

回答

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

另一種配置輔助功能服務的方法是從java代碼中覆蓋AccessibilityServiceOnServiceConnected()方法。

@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); 
    } 

參考