11

我正在尝试根据本教程在我的应用程序中实现 NotificationListenerService:http ://www.kpbird.com/2013/07/android-notificationlistenerservice.html ,但是在调用 getActiveNotifications 时出现 NullPointerException。

Caused by: java.lang.NullPointerException
at android.os.Parcel.readException(Parcel.java:1437)
at android.os.Parcel.readException(Parcel.java:1385)


at android.app.INotificationManager$Stub$Proxy.getActiveNotificationsFromListener(INotificationManager.java:500)
at android.service.notification.NotificationListenerService.getActiveNotifications(NotificationListenerService.java:149)
at com.rootsoft.rsnotificationservice.RSNotificationService.activeNot(RSNotificationService.java:85)
at com.rootsoft.rsnotificationservice.RSNotificationService.access$0(RSNotificationService.java:81)
at com.rootsoft.rsnotificationservice.RSNotificationService$1.onReceive(RSNotificationService.java:105)
at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:763)
... 9 more

我正在向应该生成所有通知列表的服务发送广播:

private void activeNot () {
    List l = new List();
    l.Initialize();

    for (StatusBarNotification sbn : getActiveNotifications() ) { <---- Error happens here
        l.Add(sbn);
    }

    Log.i("B4A", "List created.");


    }
}
4

3 回答 3

20

编辑:从那以后,我对此有了更多的了解并使它起作用了!

注意:首先,确保您已在 Android 设备的通知访问设置窗格中启用您的应用程序。

到目前为止,我遇到了完全相同的问题。事实证明,覆盖onBind是危险的。如果你做 override onBind,你必须返回相同的 IBinder super.onBind(intent)。如果您想返回您自己的自定义活页夹,请确保您使用唯一的 Intent,并且仅在收到自定义 Intent 时才返回您的自定义活页夹。

@Override
public IBinder onBind(Intent intent)
{
    if (intent.getAction().equals("custom_intent"))
    {
        return customBinder;
    }
    else
    {
        return super.onBind(intent);
    }
}

一旦您授予它读取通知的权限,系统就会在您的服务上调用 onBind。如果您的 onBind 向系统返回自定义绑定器,系统将不会给您通知,并可能导致空指针或安全异常。

希望这有帮助!

于 2014-02-07T23:53:04.767 回答
3

不要直接在 onCreate 或 onBind 中调用 getActiveNotification 方法。因为onBind会调用super.onBind进行初始化,所以可以使用handler来替换。这是我的演示: https ://github.com/yihongyuelan/NotificationListenerServiceDemo

于 2014-11-13T10:17:49.647 回答
2

当我尝试使用 startService() 启动服务时,它发生在我身上。我错了!当用户启用您的应用程序侦听通知时,系统会为您执行此操作

于 2013-11-16T21:05:55.010 回答