2015-10-29 128 views
3

我偵聽WhatsApp消息等通知。Android NotificationListenerService onNotificationPosted觸發兩次

但每次NotificationListenerService觸發兩次通知時。

有誰知道這個問題?

這是從AndroidManifest.xml中的一個片段:

<service android:name=".NotifyService" 
      android:label="WhatsNotify" 
      android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"> 
    <intent-filter> 
       <action android:name="android.service.notification.NotificationListenerService"></action> 
    </intent-filter> 
</service> 

而且NotificationListenerService類中:

public class NotifyService extends NotificationListenerService { 

    @Override 
    public void onNotificationPosted(StatusBarNotification sbn) { 
     Log.i("NotifyService", "got notification"); 
    } 
} 

編輯:既StatusBarNotification S的 性質:

第一通知:

0|com.whatsapp|1|[email protected]|10073

其次通知:

0|com.whatsapp|1|null|10073

+0

你有這個問題的解決方案 –

+0

@BhanuSharma號我的解決方案是創建一個新的android項目,然後它的工作。 – gravmatt

+0

意味着你在新項目中寫過相同的代碼,它會自動正常運行? –

回答

2

我不知道爲什麼會這樣。也許通知標誌可能觸發它兩次。

你可以試着省略重複執行自己:

public class NotifyService extends NotificationListenerService { 
    private String mPreviousNotificationKey; 
    @Override 
    public void onNotificationPosted(StatusBarNotification sbn) { 
     if(TextUtils.isEmpty(mPreviousNotification) || !TextUtils.isEmpty(mPreviousNotification) && !sbn.getKey().equals(mPreviousNotificationKey)){ 
     Log.i("NotifyService", "got notification"); 
    } 
} 

每個StatusBarNotification具有生成唯一的密鑰:

private String key() { 
    return user.getIdentifier() + "|" + pkg + "|" + id + "|" + tag + "|" + uid; 

} 

抱在一起以前的密鑰可以區分對於給定的包後通知。

+1

當第二次觸發通知時,所有屬性與第一個屬性相同。除了標籤。標籤爲空。 – gravmatt

+0

@gravmatt第一個有一個標籤? key屬性呢? –

+1

是的,它有一個標籤。 **第一次:** 0|com.whatsapp|1|[email protected]|10073 **第二次:** 0 | com.whatsapp | 1 | null | 10073 – gravmatt