我希望能够在我的应用程序和日历应用程序发生通知时收听(BroadcastReceiver?),即使用户没有与之交互并且即使屏幕关闭也是如此。
我还希望能够知道用户何时滑动通知。
我知道AccessibilityEvent可以启用做第一件事(侦听通知),但它不能做第二件事(无法侦听通知解除)。还有其他方法吗?
我该怎么做?当我自己的通知发生(它们用于日历事件)并且知道通知仍在通知托盘中时,我至少可以调用我的应用程序/侦听器吗?
我希望能够在我的应用程序和日历应用程序发生通知时收听(BroadcastReceiver?),即使用户没有与之交互并且即使屏幕关闭也是如此。
我还希望能够知道用户何时滑动通知。
我知道AccessibilityEvent可以启用做第一件事(侦听通知),但它不能做第二件事(无法侦听通知解除)。还有其他方法吗?
我该怎么做?当我自己的通知发生(它们用于日历事件)并且知道通知仍在通知托盘中时,我至少可以调用我的应用程序/侦听器吗?
您可以收听所有日历通知信息。你怎么说,你应该使用 AccessibilityService 并切换通知类型。然后,如果它来自谷歌日历,你会比较它的包名称。
public void onAccessibilityEvent(AccessibilityEvent event) {
try {
switch (event.getEventType()) {
case AccessibilityEvent.TYPE_VIEW_CLICKED:
Log.d(LOG_SERVICE, "Click");
break;
case AccessibilityEvent.TYPE_VIEW_FOCUSED:
Log.d(LOG_SERVICE, "Focused");
break;
case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:
Log.d(LOG_SERVICE, "Ihas been received a not" + type);
String pack = (String) event.getPackageName();
if (pack.equalsIgnoreCase("com.google.android.calendar")) {
//The event information.
}
break;
default:
type = "otro";
Log.d(LOG_SERVICE, "otro");
break;
}
AccessibilityNodeInfo notinfo = event.getSource();
if (notinfo != null) {
doSomethingWithNodeInfo(notinfo);
}
} catch (Exception e) {
e.printStackTrace();
}
如果 Android 设备带有 ICS 或更多。如果应用程序开发人员设计的通知具有可访问性,您可以使用 AccessibilityNodeInfo。