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)返す必要があります。独自のカスタム バインダーを返す場合は、必ず固有のインテントを使用し、カスタム インテントを受け取ったときにのみカスタム バインダーを返します。

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

通知を読み取る権限をサービスに付与すると、システムはサービスで onBind を呼び出します。onBind がカスタム バインダーをシステムに返す場合、システムは通知を送信せず、Null ポインターまたはセキュリティ例外が発生する可能性があります。

これが役に立ったことを願っています!

于 2014-02-07T23:53:04.767 に答える
3

onCreate または onBind で getActiveNotification メソッドを直接呼び出さないでください。onBind は super.onBind を呼び出して初期化するため、ハンドラを使用して置き換えることができます。ここに私のデモがあります: https://github.com/yihongyuelan/NotificationListenerServiceDemo

于 2014-11-13T10:17:49.647 に答える
2

startService() でサービスを開始しようとしたときに起こりました。私は間違っていた!ユーザーがアプリで通知をリッスンできるようにすると、システムがそれを行います

于 2013-11-16T21:05:55.010 に答える