1. 程式人生 > >在Service中播放音樂

在Service中播放音樂

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.lwking.musicservice.MainActivity">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="播放"
        android:id="@+id/btn_music_play"
        android:layout_gravity="center_horizontal" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="暫停"
        android:id="@+id/btn_music_pause"
        android:layout_gravity="center_horizontal" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="停止"
        android:id="@+id/btn_music_stop"
        android:layout_gravity="center_horizontal" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="退出"
        android:id="@+id/btn_music_exit"
        android:layout_gravity="center_horizontal" />
</LinearLayout>

介面效果


MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button btn_music_play; //播放
    private Button btn_music_pause; //暫停
    private Button btn_music_stop; //停止
    private Button btn_music_exit; //退出
    private MediaPlayer mediaPlayer; //音樂播放物件

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //繫結按鈕
        btn_music_play = (Button) findViewById(R.id.btn_music_play);
        btn_music_pause = (Button) findViewById(R.id.btn_music_pause);
        btn_music_stop = (Button) findViewById(R.id.btn_music_stop);
        btn_music_exit = (Button) findViewById(R.id.btn_music_exit);

        //設定點選監聽
        btn_music_play.setOnClickListener(this);
        btn_music_pause.setOnClickListener(this);
        btn_music_stop.setOnClickListener(this);
        btn_music_exit.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Intent intent = new Intent(this, MusicService.class);
        switch (v.getId()) {
            case R.id.btn_music_play: //播放
                intent.putExtra("action", "play");//設定標識
                startService(intent);//開啟Service
                break;
            case R.id.btn_music_pause: //暫停
                intent.putExtra("action", "pause");
                startService(intent);
                break;
            case R.id.btn_music_stop: //停止
                intent.putExtra("action", "stop");
                startService(intent);
                break;
            case R.id.btn_music_exit: //退出
                stopService(intent); //停止Service
                finish(); //關掉頁面
                break;
        }
    }
}


MusicService.java

/**
 * 播放音樂的service
 */
public class MusicService extends Service {

    private MediaPlayer mediaPlayer;

    public MusicService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        String action = intent.getStringExtra("action"); //獲取標識
        if ("play".equals(action)) {
            playMusic();
        } else if ("pause".equals(action)) {
            pauseMusic();
        } else if ("stop".equals(action)) {
            stopMusic();
        }
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        //在退出前停止音樂
        stopMusic();
    }

    /**
     * 播放音樂
     */
    private void playMusic() {
        if (mediaPlayer == null) {
            mediaPlayer = MediaPlayer.create(this, R.raw.closer);
        }
        mediaPlayer.start();
    }

    /**
     * 暫停音樂
     */
    private void pauseMusic() {
        if (mediaPlayer != null && mediaPlayer.isPlaying()) {
            mediaPlayer.pause();
        }
    }

    /**
     * 停止音樂
     */
    private void stopMusic() {
        if (mediaPlayer != null && mediaPlayer.isPlaying()) {
            mediaPlayer.stop();
            mediaPlayer.reset();
            mediaPlayer.release();
            mediaPlayer = null;
        }
    }
}

注意點

1.要在目錄中res下建立一個資料夾raw用了存放音訊檔案


2.音訊檔名要小寫,不能帶字尾。不然會報錯