天天看點

Service之《讓服務在前台運作》

    由上篇文章我們知道了,Service是沒有互動界面的,一般用于背景工作的,但在很多時候我們有必要讓使用者知道我們的Service在背景運作,這是很Foreground Service就出現了。Foreground其實就是當你的Service運作時使用通知(Notification)。比如一些聽歌軟體,酷狗,天天動聽,當你開始聽歌的時候通知欄會自動顯示目前所聽的歌曲,你可以退出聽歌界面去幹些别的事,但當你點選通知欄時又可以回到聽歌的界面。

   那麼我們如何才能實作這個功能呢?google在Service這個類當中給我們提供了兩個方法:startForeground和stopForeground。使用這兩個方法我們就能很輕松的實作這個功能,接下來我們修改一下上一篇文章的代碼,使我們的音樂播放器實作這個功能。

   我們隻需簡單的修改一個LocalService這個類,以下是修改部分:

Service之《讓服務在前台運作》

接下來是這個方法的實作:

/**
	 * 打開一個通知
	 */
	private void openNotification()
	{
		//建立到一個Notification對象,設定通知欄上面的圖示,時間
		Notification notification = new Notification(R.drawable.notification_img,getText   (R.string.ticker_text),System.currentTimeMillis());
		//設定當點選通知時會跳轉到哪個界面
		Intent intent = new Intent(this,MainActivity.class);
		PendingIntent pendingIntent=PendingIntent.getActivity(this, 0, intent, 0);
		//設定通知欄上面的标題,内容等資訊
		notification.setLatestEventInfo(this, getText(R.string.notification_title),getText(R.string.notification_message),pendingIntent);
		//開啟前台服務,第一個參數一般有兩種選擇FLAG_ONGOING_EVENT表示正在運作,這種類型的通知是無法清除掉的
		//另外一種是FLAG_AUTO_CANCEL,這個标志表明點選了這個通知之後,就自行的從通知欄上清除掉。
		startForeground(Notification.FLAG_ONGOING_EVENT, notification);
	}
           

為了讓Service停止以後通知能夠消除掉,我們需要在Destroy方法中添加stopForeground方法。

Service之《讓服務在前台運作》

好了,現在我們運作一下。

Service之《讓服務在前台運作》

可以看到當我們點選play2時,會出現一個通知。這時候我們退出這個activity。

Service之《讓服務在前台運作》

下拉通知欄,可以看到正在播放你不在這首歌曲。我們點選這個通知時又會回到程式主界面,我們點選stop2以後,這個通知就會消失掉。

   Ok,關于前台服務就介紹到這裡,還有跟多細節上優化需要大家自己去探索噢。大家可以參考一下荔枝FM的通知,做的很漂亮。

繼續閱讀