0

我有一個廣播接收器類,當我收到一個特定的廣播時,我想停止前臺通知。所以我嘗試context.stopForeground(),但智能感知沒有顯示該方法。我們如何在廣播接收機類中調用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(); 

     } 


    } 
} 

回答

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

我們不能得到對服務類的引用,然後調用該方法嗎? –

+0

@WeirdNerd是的,它是'Service'類中的一個公共方法。所以,你只需要一個'Service'實例來調用它。 – Shaishav

+0

如何在廣播接收器中獲得服務引用對象? –

相關問題