安卓后台播放音乐

后台播放需要用到服务,今天就写一个用服务来进行播放音乐。
首先是一个服务的类

package com.qf.service_demo08;

import java.io.IOException;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Binder;
import android.os.IBinder;

public class PlayMusicService extends Service {

    private MediaPlayer mediaPlayer; // 媒体播放器
    private int position; // 媒体播放器播放的进度

    @Override
    public void onCreate() {
        super.onCreate();
        // 初始化媒体播放器
        if (mediaPlayer == null) {
            mediaPlayer = MediaPlayer.create(this, R.raw.ff);
            mediaPlayer.setLooping(true); // 设置单曲循环

        }
        // 在播放结束之后会回调的方法,在此方法中一般做释放资源的操作
        mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                mediaPlayer.release(); // 释放资源
            }
        });
    }

    class MyBinder extends Binder {
        public PlayMusicService getService() {
            return PlayMusicService.this;
        }
    }

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

    // 播放音乐
    /**
     * 播放有两种情况 1.从头开始播放,刚进行service点击播放,或者是点击停止之后,在按播放
     * 2.从某个位置开始播放,因为是点击了暂停键之后的播放。 播放的前提 1.Mediaplayer的对象不能为空 2.音乐不是正在播放中
     * */
    public void playMusic() {
        if (mediaPlayer != null && !mediaPlayer.isPlaying()) {
            try {
                if (position != 0) { // 暂停----》播放
                    mediaPlayer.seekTo(position); // 设置当前媒体播放器的位置
                    mediaPlayer.start(); // 启动媒体播放器
                } else { // 第一次播放,或者从停止到播放
                    mediaPlayer.stop();
                    mediaPlayer.prepare();  //准备播放器,必须先准备在播放
                    mediaPlayer.start();    //播放音乐

                }
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    /**
     * 暂停音乐的播放
     * 暂停前提:
     * 1.mediaplayer不能为null
     * 2.正在播放中
     * */
    public void pauseMusic(){
        if (mediaPlayer!=null&&mediaPlayer.isPlaying()) {
            position = mediaPlayer.getCurrentPosition();    //获取当前播放的位置
            mediaPlayer.pause();
        }
    }
    /**停止播放
     * 停止前提:
     * 1. mediaplayer不能为null
     * */
    public void stopMusic() {
        if (mediaPlayer!=null) {
            position = 0;
            mediaPlayer.pause();
            mediaPlayer.seekTo(0);         //进度条设置为0.
            mediaPlayer.stop();   //停止播放
        }
    }
}

这里是主函数:

package com.qf.service_demo08;

import com.qf.service_demo08.PlayMusicService.MyBinder;

import android.os.Bundle;
import android.os.IBinder;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.view.Menu;
import android.view.View;

public class MainActivity extends Activity {

    private MyServiceConnect conn;
    private PlayMusicService playservice;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        conn = new MyServiceConnect();
    }

    class MyServiceConnect implements ServiceConnection {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            PlayMusicService.MyBinder binder = (MyBinder) service;
            playservice = binder.getService();
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    }

    public void click(View view) {
        switch (view.getId()) {
        case R.id.play:
            if (playservice != null) {
                playservice.playMusic();
            }
            break;
        case R.id.pause:
            if (playservice != null) {
                playservice.pauseMusic();
            }
            break;
        case R.id.stop:
            if (playservice != null) {
                playservice.stopMusic();
            }
            break;
        case R.id.bind:
            Intent intent = new Intent(this, PlayMusicService.class);
            bindService(intent, conn, BIND_AUTO_CREATE);
            break;
        case R.id.unbind:
            if (conn != null) {
                unbindService(conn);
            }
            break;
        default:
            break;
        }
    }

}

你可能感兴趣的:(安卓后台播放音乐)