我试图根据此教程在我的应用程序中实现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.");


    }
}

最佳答案

编辑:从那时起,我已经学到了更多信息并使它工作!

注意:首先,请确保已在Android设备的“通知访问”设置 Pane 中启用了您的应用程序。

直到现在我都遇到了完全相同的问题。事实证明,覆盖onBind是危险的。如果确实覆盖onBind,则必须返回super.onBind(intent)返回的同一IBinder。如果要返回自己的定制活页夹,请确保使用唯一的 Intent ,并且仅在收到定制 Intent 时才返回定制活页夹。

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

一旦您授予服务读取通知的权限,系统就会在您的服务上调用onBind。如果您的onBind将自定义绑定(bind)程序返回到系统,则系统将不会向您发送通知,并且可能导致Null Pointer或Security Exception。

希望这对您有所帮助!

关于java - NotificationListenerService : NullPointerException on getActiveNotifications,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18684738/

10-09 03:00