我想知道NotificationListenerService是否有办法知道是否已点击通知或已取消通知。我可以看到NotificationListenerService中的Inner类NotificationListenerWrapper有一个onNotificationClick()方法,但由于NotificationListenerWrapper被@hide注释隐藏,我无法使用它。
我的问题是我是否可以编写一个监听器,它基本上可以跟踪通知是否已被点击或解除。
基本上我想跟踪我的应用程序的通知是否被解雇,或者是否在每个通知中都没有任何侵入性代码而被点击。
P.S。 NotificationListenerService仅提供onNotificationPosted()和onNotificationRemoved(),但我的要求是知道是否单击或删除了通知。
由于
答案 0 :(得分:12)
当您创建并显示通知时,您会在点击它时使用PendingIntent
(使用.setContentIntent
)。您还可以定义PendingIntent
何时被解雇(使用.setDeleteIntent(PendingIntent)
。
如果您希望能够跟踪通知,则需要传递PendingIntent(如BroadcastReceiver或IntentService)并传递一些参数,如notificationId和isDismissed,并在BroadcastReceiver中完成您的工作。
您可以在this回答中看到完整的代码。
答案 1 :(得分:7)
我不认为有这样的倾听者。但您可以使用PendingIntent
和BroadcastReceiver
适用于OnClick
添加ContentIntent
和BroadcastReceiver
。因此,您会知道BroadcastReceiver
Intent onClickIntent = new Intent(this, OnClickBroadcastReceiver.class);
PendingIntent onClickPendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 0, onClickIntent, 0);
mBuilder.setContentIntent(onClickPendingIntent);
在BroadcastReceiver
内你可以写出你的逻辑
public class OnClickBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//Open your activity here
Intent mainIntent = new Intent(context, YourActivity.class);
context.startActivity(mainIntent);
// Do your onClick related logic here
}
}
for onDismiss
为此,您需要在通知构建器
中添加DeleteIntent
Intent onCancelIntent = new Intent(this, OnCancelBroadcastReceiver.class);
PendingIntent onDismissPendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 0, onCancelIntent, 0);
mBuilder.setDeleteIntent(onDismissPendingIntent);
和BroadcastReceiver
就是
public class OnCancelBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//Do your logic here
}
}
请勿忘记将这些BroadcastReceiver
注册到AndroidManifest