1

我有一个广播接收器类,当我收到特定广播时,我想停止前台通知。所以我尝试context.stopForeground()了,但智能感知没有显示该方法。我们如何调用stopForeground()广播接收器类中的方法?

public class Broad extends BroadcastReceiver {


    @Override
    public void onReceive(Context context, Intent intent) {


         if(intent.getAction()==Const.ACTION_STOP)
        {

             // unable to call like this
            context.stopForeground();

        }


    }
}
4

2 回答 2

2

stopForeground()Service类的一部分,因此不能从接收者或context提供给它的对象调用它。

BroadcastReceiver在现有Service的实例变量中设置 a:

    private final BroadcastReceiver mYReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            // Bla bla bla
            stopForeground(NOTIF_ID);
    };

您在您Service唯一的(可能在onStartCommand())中注册此接收器,使用:

IntentFilter iFilter = new IntentFilter("my.awesome.intent.filter");
registerReceiver(mYReceiver, iFilter);

这将能够mYReceiver在触发广播时IntentFilter触发,您可以在应用程序的任何位置执行以下操作:

sendBroadcast(new Intent("my.awesome.intent.filter"))
于 2016-08-02T16:59:27.220 回答
0

如果你想从广播接收器中停止它//在你的接收器中

      @Override
        public void onReceive(Context context, Intent intent) {
       context.stopService(new Intent(context, YourService.class);
}

还在相关服务的 onDestroy 方法中添加 stopForground(true)

于 2021-06-16T09:16:16.513 回答