2014-12-05 45 views
2

我想爲Qualcomm Toq Smartwatch製作通知小程序。它有一個預製的,但它不適用於Android棒棒糖,所以我決定自己創建一個。我閱讀了關於使用輔助功能服務的信息,但它對我無效。有人可以找到我的代碼有什麼問題嗎?我再次檢查併爲服務啓用了「設置>輔助功能」,所以看起來不是問題。通過代碼獲取所有Android棒棒糖通知

Android清單:

<service android:name=".ToqAccessibilityService" 
     android:label="@string/service_name" 
     android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" 
     android:enabled="true" 
     android:exported="false"> 
     <intent-filter> 
      <action android:name="android.accessibilityservice.AccessibilityService" /> 
     </intent-filter> 
     <meta-data 
      android:name="android.accessibilityservice" 
      android:resource="@xml/accessibilityservice" /> 
    </service> 

然後代碼:

public class ToqAccessibilityService extends AccessibilityService { 
@Override 
public void onAccessibilityEvent(AccessibilityEvent e) { 
    Log.d("ToqAN","Recieved event: "+AccessibilityEvent.eventTypeToString(e.getEventType())); 
    Parcelable data = e.getParcelableData(); 
    if (data instanceof Notification) { 
     Log.d("ToqAN","Recieved notification"); 
     Notification notification = (Notification) data; 
     Log.d("ToqAN","ticker: " + notification.tickerText); 
     Log.d("ToqAN","icon: " + notification.icon); 
     Log.d("ToqAN", "notification: "+ e.getText()); 
    } 
} 

@Override 
public void onInterrupt() {} 

}

的配置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" 
android:description="@string/accessibility_service_description" 
android:accessibilityFlags="flagDefault" 
android:canRetrieveWindowContent="false"/> 

如果我改變 「typeNotificationStateChanged」 爲 「typeAllMask」我得到所有類型的點擊和窗口事件,但沒有一個關於通知的事件。有人在我的代碼中可能會出錯嗎?我知道有很多類似的問題,但我沒有在這些條目中找到任何解決方案。

非常感謝您提前!

回答

1

我有問題的解決方案。我使用NotificationListenerService來代替使用AccessibilityService。

Android清單:

<service android:name=".NotificationListener" 
     android:label="@string/service_name" 
     android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"> 
     <intent-filter> 
      <action android:name="android.service.notification.NotificationListenerService" /> 
     </intent-filter> 
    </service> 

的NotificationListener類:

public class NotificationListener extends NotificationListenerService { 
    @Override 
    public void onNotificationPosted(StatusBarNotification sbn) { 
     Notification n = sbn.getNotification(); 
    } 

    @Override 
    public void onNotificationRemoved(StatusBarNotification sbn) { 
     Notification n = sbn.getNotification(); 
    } 
} 

最後,你必須進入 「設置>聲音&的通知>的通知通道」,使您的應用程序訪問的通知。

通過這種方式,我設法在創建和刪除時獲取通知。

如果有人使用AccessibilityService實現相同,請發佈答案。

+0

謝謝CitoPaez這個有用的答案。我在Android L Accessibility服務中也面臨同樣的問題。再次感謝你 – Kushal 2015-03-12 13:25:20