为什么我们不能在广播接收器类中调用StopForeground()方法?

时间:2016-08-02 16:56:11

标签: android broadcastreceiver android-notifications foreground-service

我有一个广播接收器类,当我收到特定的广播时,我想停止前台通知。所以我尝试了context.stopForeground(),但是intellisense没有显示方法。我们如何在广播接收器类中调用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();

        }


    }
}

2 个答案:

答案 0 :(得分:1)

stopForeground()Service类的一部分,因此无法从接收方或提供给它的context调用它。

要在现有BroadcastReceiver中设置Service作为实例变量:

    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"))

答案 1 :(得分:0)

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

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

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