package com.bigfat.guessmusic.service; import android.app.Service; import android.content.Intent; import android.content.res.AssetFileDescriptor; import android.media.MediaPlayer; import android.os.IBinder; import com.bigfat.guessmusic.constant.Constant; import com.bigfat.guessmusic.util.Utils; import java.io.IOException; /** * @author <a href="mailto:fbzhh007@gmail.com">bigfat</a> * @since 2015/2/8 */ public class AudioService extends Service { public static final String TAG = "AudioService"; private MediaPlayer mediaPlayer;//歌曲播放器 private MediaPlayer[] toneMediaPlayer = new MediaPlayer[Constant.TONE_INFO.length];//音效播放器 @Override public void onCreate() { super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { switch (intent.getIntExtra(Constant.EXTRA_COMMAND, -1)) { case Constant.COMMAND_SONG_PLAY: playSong(intent.getStringExtra(Constant.EXTRA_SONG_NAME)); break; case Constant.COMMAND_SONG_STOP: stopSong(); break; case Constant.COMMAND_TONE_PLAY: playTone(intent.getIntExtra(Constant.EXTRA_TONE_INDEX, -1)); break; } return super.onStartCommand(intent, flags, startId); } @Override public IBinder onBind(Intent intent) { return null; } @Override public void onDestroy() { super.onDestroy(); } /** * 播放歌曲 * * @param fileName 歌曲文件名 */ private void playSong(String fileName) { if (mediaPlayer == null) { mediaPlayer = new MediaPlayer(); } mediaPlayer.reset(); AssetFileDescriptor assetFileDescriptor = Utils.getAssetFileDescriptor(AudioService.this, fileName); try { mediaPlayer.setDataSource(assetFileDescriptor.getFileDescriptor(), assetFileDescriptor.getStartOffset(), assetFileDescriptor.getLength()); mediaPlayer.prepare(); mediaPlayer.start(); } catch (IOException e) { e.printStackTrace(); } } /** * 停止播放歌曲 */ private void stopSong() { if (mediaPlayer != null) { mediaPlayer.stop(); } } /** * 播放音效 */ private void playTone(int toneIndex) { if (toneMediaPlayer[toneIndex] == null) { toneMediaPlayer[toneIndex] = new MediaPlayer(); toneMediaPlayer[toneIndex].reset(); AssetFileDescriptor assetFileDescriptor = Utils.getAssetFileDescriptor(AudioService.this, Constant.TONE_INFO[toneIndex]); try { toneMediaPlayer[toneIndex].setDataSource(assetFileDescriptor.getFileDescriptor(), assetFileDescriptor.getStartOffset(), assetFileDescriptor.getLength()); toneMediaPlayer[toneIndex].prepare(); } catch (IOException e) { e.printStackTrace(); } } toneMediaPlayer[toneIndex].start(); } }