Android服務—基於MediaPlayer后台播放音樂
操作環境:Android Studio 4.0.0、SDK Level 21(版本5.0 Lollipop)、Windows 10、集成顯卡RX550、CPU i7-8
一、設置布局
在布局文件(activity_main.xml)中隨意布局,我的布局是用的相對布局,如下圖所示:
![]()
當然這個居中的效果就是利用相對布局中的gravity屬性,將其中包含的center、center_vertical和center_horizontal都設置為true即可。
二、設置按鈕響應函數
在MainActivity.java中創建新的函數,命名為onClickPlayMusic,當然命名隨意了,如下面代碼所示:
public void onClickPlayMusic(View btn) { Intent intent = new Intent(MainActivity.this, PlayMusicService.class); startService(intent); }
其中的PlayMusicService便是今天的重點。到現在為止,應該不難理解這句話的意思:當用戶點擊播放音樂的按鈕時,我們用Intent傳遞一個東西(啥都沒有)到一個名為PlayMusicService的服務。
所以我們是在自定義的PlayMusicService服務中實現音樂的播放的。
三、設置PlayMusicService服務
自己建立一個服務是一個很麻煩的事兒,不過好在AS已經幫我們完成了一個創建服務的向導。步驟如圖:
![]()
![]()
四、重寫onHandleIntent()方法
將onHandleIntent()方法的方法體清空,然后里面寫入播放音樂的代碼:
@Override protected void onHandleIntent(Intent intent) { MediaPlayer mediaPlayer = MediaPlayer.create( getApplicationContext(), R.raw.the_story_between_moon_and_me ); mediaPlayer.start(); }
然后你就以為你做完了,當然沒有。怎么可能,自始至終都沒見着音頻文件。而且這個地方還是一個容易出錯的地方,尤其是這個R.raw.the_story_between_moon_and_me。
五、放入音頻文件
(1)新建raw文件夾
![]()
(2)放入音頻文件
直接將.mp3文件拖入raw文件夾中,但是操作必須在AS中完成。即將文件拖入AS不松手再復制到raw中。
切記,在android的資源文件中不能出現大寫的文件名,因為大寫的字母不能在R.java中識別生成id。
在做完上述兩步后,有部分同志可能遇到這樣的情況:
(《引用自Android Studio中R無法找到res/raw文件夾》,作者王睿丶)
不要慌張,我們只需要重建(Rebuild)項目即可,也就是說AS不能及時發現我們其實已經建立了一個文件夾,所以需要我們手動重構項目。如下圖所示:
![]()
音頻文件(下載):ラックライフ-僕と月の話;
音頻文件(試聽):ラックライフ-僕と月の話;