2012-10-02 43 views
0

我正在實施音樂播放器。通知允許用戶暫停或跳過歌曲。 我用如何從通知中聯繫服務的方法?

Intent i = new Intent("com.package.app"); 
mExpandedView.setOnClickPendingIntent(R.id.next_song, PendingIntent.getBroadcast(this, 0, i, 0)); 

爲了傳遞這個點擊承載的MediaPlayer和所有的相關方法的MusicService。我想直接調用此服務的一個方法部分(例如playNextSong()),但getService()似乎只允許我啓動一項新服務,而不是調用服務中的方法或獲取一些數據。我甚至不需要啓動該服務,因爲音樂正在播放,它已經在運行。

那麼有沒有辦法做到這一點,我不知道?或者是:
通知廣播到BroadcastReceiver,然後BroadcastReceiver向服務廣播推薦的方式做到這一點? 它看起來像一個複雜的方式來做一些簡單的...

+0

你試圖做什麼?你說「將這個點擊傳送給我的應用程序」。點擊什麼?什麼樣的應用程序? – Christine

+0

@Christine爲了清晰起見,我編輯了這個問題。基本上我想從通知中調用一個屬於我的MusicService的方法。我能夠通過首先向MusicBroadcastReceiver廣播來做到這一點;然後使用它將本地廣播發送到MusicService。我想知道我是否可以擺脫BroadcastReceiver,這個他唯一的角色就是轉播廣播。感謝您的回答。 – Teovald

回答

0

創建通知的PendingIntent作爲廣播消息,自定義一個(使用自己的字符串,如com.my.custom.broadcast.message.action)。在AndroidManifest中創建並註冊新的廣播接收器,該接收器將由此自定義操作觸發。 OnReceive方法的廣播接收器,根據傳遞給onReceive方法的Service類和上下文參數,使用自定義參數/操作或其他任何方式啓動您的服務。

也許你可以嘗試通過爲創建的PendingIntent直接啓動的服務,但我認爲這是更好地做到這一點,通過中間步驟:廣播接收器

+0

是的,這就是我正在做的(它的工作原理)。我想知道我是否可以擺脫BroadcastReceiver:它的唯一作用是轉播廣播...所以它看起來有點無用和不雅(並且浪費資源),但我還沒有找到直接調用服務的方法方法呢。 – Teovald

+0

可以使用廣播,因爲它根本不佔用資源。剛剛啓動一次,並調用onReceive方法,即廣播通常。所以,別擔心。 –

+0

謝謝你的回答,我會這樣。 – Teovald

0

從你就可以開始一個活動通知。該活動將執行「bindService」並調用服務中的適當方法,然後完成()。該活動不需要具有UI,因此用戶不會看到它。但是,這比廣播接收器的代碼更多。