2012-02-20 63 views
28

在我正在開發的Android應用程序中,我希望能夠檢測何時出現新的狀態欄通知,而不管它是否是由我的應用程序引起的。具體來說,我想計算給定時間範圍內的通知數量。檢測新的Android通知

這甚至是可能的,如果是這樣,怎麼樣?

回答

52

其實,這是可能的,我在我的應用程序中使用它。

您需要註冊一個AccessibilityService並確保用戶啓用服務。

示例服務:

public class InstantMessenger extends AccessibilityService { 

@Override 
public void onAccessibilityEvent(AccessibilityEvent event) { 
    if (event.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) { 
     //Do something, eg getting packagename 
     final String packagename = String.valueOf(event.getPackageName()); 
} 
} 

@Override 
protected void onServiceConnected() { 
    if (isInit) { 
     return; 
    } 
    AccessibilityServiceInfo info = new AccessibilityServiceInfo(); 
    info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED; 
    info.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN; 
    setServiceInfo(info); 
    isInit = true; 
} 

@Override 
public void onInterrupt() { 
    isInit = false; 
} 
} 

Example for checking if your Service is activated

+0

這很酷。不知道。謝謝! – koopaking3 2012-03-09 17:11:30

+12

@Sean注意:要啓動「AccessibilityService」,用戶需要打開設置 - 輔助功能,啓用輔助功能,然後單獨啓用您的服務。此時,他們會收到以下消息:「此無障礙服務可能能夠收集您鍵入的所有文本,包括除密碼之外的個人數據信用卡,還可能會記錄您的用戶界面交互,它來自應用程序xxx 。 使用...?」除非您將此用於個人用途或商業用途,否則這可能會對市場用戶產生很大的信任。只是想給你一個大的圖片 – koopaking3 2012-03-09 17:13:17

+1

並不意味着你不應該使用它,只是在開始投入工作之前意識到建立你自己的 – koopaking3 2012-03-09 17:14:35

19

Notification Listener API在採用Android 4.3可讓您做到這一點。

有了這個,對輔助功能攻擊的需求就減少了。它也允許你關閉通知。

+0

通知偵聽器尚未完全工作,例如,您無法從Google導航更新中檢索文本(總是返回null)。這意味着可訪問性'hack'仍然有用 – Fuzzy 2014-04-20 08:40:35

+0

將其更改爲「less need」而不是「no need」 – thoutbeckers 2014-04-22 10:53:31

+0

是否可以*以任何方式更改通知?我想使應用程序的通知無法通過該應用程序提取 – squirrel 2015-06-18 19:18:53