Android 通知的setDeleteIntent中的挂起意图从不调用BroadcastReceiver

Android 通知的setDeleteIntent中的挂起意图从不调用BroadcastReceiver,android,service,notifications,broadcastreceiver,swipe,Android,Service,Notifications,Broadcastreceiver,Swipe,让我的前台服务在刷卡或“清除所有通知”按钮时简单地关闭有相当大的麻烦。我知道有几个像这样的问题,但我已经读过了,并将列出一些我已经尝试过的问题。我尝试了一种方法,在该方法中,您将一个简单的意图和一个额外的内容传递到一个挂起的意图中,然后将该挂起的意图添加到setDeleteIntent()。那没用,从来没人打过电话 我也试过了,结果也一样。这也与问题的“答案”有关。有多少应用程序的通知是可以通过滑动或清除所有按钮来拒绝的,我肯定错过了一些非常明显的东西,我不知道是什么 我当前的代码是什么样子的(

让我的前台服务在刷卡或“清除所有通知”按钮时简单地关闭有相当大的麻烦。我知道有几个像这样的问题,但我已经读过了,并将列出一些我已经尝试过的问题。我尝试了一种方法,在该方法中,您将一个简单的意图和一个额外的内容传递到一个挂起的意图中,然后将该挂起的意图添加到setDeleteIntent()。那没用,从来没人打过电话

我也试过了,结果也一样。这也与问题的“答案”有关。有多少应用程序的通知是可以通过滑动或清除所有按钮来拒绝的,我肯定错过了一些非常明显的东西,我不知道是什么

我当前的代码是什么样子的(所有这些都在我的服务类中)

广播接收机类

public class NotificationDismissedReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // this is never called
        stopSelf();
    }
}

// in the manifest for that BroadcastReceiver, have also tried it with these values false
android:exported="true"
android:enabled="true"
未决意图

private PendingIntent createOnDismissedIntent(Context context, int notificationId) {
    Intent intent = new Intent(context.getApplicationContext(), NotificationDismissedReceiver.class);

    PendingIntent pendingIntent =
            PendingIntent.getBroadcast(context.getApplicationContext(),
                    notificationId, intent, 0);
    return pendingIntent;
}
在通知生成器中(101是我开始使用的)

编辑:

使用单独的文件接收器代替内部类版本

public class NotificationDismissedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    int notificationId = intent.getExtras().getInt("notificationId");
    /* Your code to handle the event here */
    if(notificationId == 101){
        Intent stopIntent = new Intent(context, AssistorServiceClass.class);
        context.stopService(stopIntent);
    }
}
}
Edit2


要明确的是,我并没有试图停止前台通知并保持服务的活动状态。我希望他们两人都离开,就好像我在服务类中给stopSelf打电话一样。

目前还不清楚你在哪里。在第一种方法中,您是否在尝试刷走
通知时停止了
服务的前台状态?或者你的意思是你根本不能把它刷走?无论哪种情况,第二种方法都不起作用,因为
NotificationDismissedReceiver
服务
中的一个内部类,因此无法在清单中成功注册,也无法通过显式的
意图
向广播。在第一种方法和所有方法中,是的,我根本无法滑动。对于第二种方法,我现在已经将广播接收器创建为一个单独的文件,并将其注册到清单中,但仍然没有成功。我现在的位置是帖子中的代码,我也会编辑新的接收者的样子。在新接收器中放置断点,尝试滑动通知/点击清除所有通知时不会调用该断点。在设置了所有断点之后,我还没有看到过通过滑动来取消调用任何东西。“在第一种方法和所有方法中,是的,我根本无法滑动。”–好的,是的,这是第一个链接顶部答案中提到的第一件事。对于前台的
服务
,您无法刷走
通知
。由于您不能刷卡,delete
PendingEvent
将永远不会启动。您需要先停止
服务的前台状态。我确实读过,并调用了stopfrogent(false)。对不起,我忘了提那件事。但我不清楚的是,在他的回答中,他说“因此,先停止前景(错误)”,我不确定这到底是指在哪里。我从字面上理解了它,并让stopForeground调用onCreate中的第一件事。我还想澄清一下,当我说它不刷卡时,它会在我的手机上“刷卡”一点,并显示一个gear图标来阻止对我的应用程序的通知。Idk如果这是重要的,只是一些相关的更多信息。
public class NotificationDismissedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    int notificationId = intent.getExtras().getInt("notificationId");
    /* Your code to handle the event here */
    if(notificationId == 101){
        Intent stopIntent = new Intent(context, AssistorServiceClass.class);
        context.stopService(stopIntent);
    }
}
}