利用Service打造最简单的音乐播放器

新建一个moudle,命名为MediaPlayer_ServiceDemo

1.准备素材一首歌,将音乐资源放入res/raw 目录下,如果没有raw目录,就新建一个。

2.准备布局文件,一共5个功能,开始、停止、暂停、退出应用继续播放、退出应用停止播放。
activity_main.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context="com.soft.qianyu.mediaplayerdemo.MainActivity">

    <Button
        android:id="@+id/kaishi"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="开始"
        />

    <Button
        android:id="@+id/tingzhi"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="停止"
        />
    <Button
        android:id="@+id/zanting"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="暂停"
        />
    <Button
        android:id="@+id/finish"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="退出程序并继续播放"
        />
    <Button
        android:id="@+id/goonfinish"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="退出程序并停止播放"
        />
LinearLayout>

3.在MainActivity.java中初始化按钮并设置监听等准备工作
MainActivity.java

public class MainActivity extends Activity implements View.OnClickListener {

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

 private void init() {
        findViewById(R.id.kaishi).setOnClickListener(MainActivity.this);
        findViewById(R.id.tingzhi).setOnClickListener(MainActivity.this);
        findViewById(R.id.zanting).setOnClickListener(MainActivity.this);
        findViewById(R.id.finish).setOnClickListener(MainActivity.this);
        findViewById(R.id.goonfinish).setOnClickListener(MainActivity.this);
    }

    @Override
    public void onClick(View v) {

        switch (v.getId())
        {
            case R.id.kaishi:

                break;

            case R.id.tingzhi:

                break;

            case R.id.zanting:

                break;

            case R.id.finish:

                break;

            case R.id.goonfinish:

                break;
        }
    }
}

4.新建一个Service的包,并新建一个MusicService的类继承Service。
首先重写onbind()方法,不管它
然后重写另外三个重要的方法(onCreat(),onStartComand(),onDestory()),没有提示的话自己敲(详细代码在后面)。

  • 在onCreate()方法中实例化mp
MediaPlayer mp = MediaPlayer.create(Context c , int resId);
  • 在onStartCommend()方法中去根据Intent传入的操作标记进行相应的媒体操作
 int flag = intent.getIntExtras("",-1);
     switch(flag){
       case START :
        //ToDo Something
         break ;
    }
  • 在onDestroy()方法中去释放媒体资源
 if(mp != null && mp.isPlaying){
         mp.stop();
    }
    mp.release();
    mp = null ;

具体代码如下:
MusicService.java

public class MusicService extends Service {
    //声明MediaPlayer媒体播放器操作对象
    MediaPlayer mp;
    //设置服务操作的代码号
    private static final int START =1;
    private static final int STOP =2;
    private static final int PAUSE =3;
    private static final int FINISH =5;
    private static final int GOONFINISH =4;

//实例化媒体播放器
    @Override
    public void onCreate() {
        super.onCreate();
        mp=MediaPlayer.create(MusicService.this, R.raw.zxmzf);
    }

//根据Intent传入的操作标记进行相应的媒体操作
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        //获得intent中携带的标记
        int flg = intent.getIntExtra("flg",-1);

        switch (flg){
            case START:
                if (mp!=null){
                    mp.start();

                }else {
                    if (mp==null) {
      mp = MediaPlayer.create(MusicService.this, R.raw.zxmzf);
      mp.start();
                    }
                }

                break;

            case STOP:
                //判断player != null && 正在播放的时候,才能停止
                if(mp != null && mp.isPlaying())
                {
                    mp.stop();
                    //释放资源
                    mp.release();
                    mp = null ;
                }

                break;

            case PAUSE:
                    mp.pause();
                break;

            case FINISH:

                break;

            case GOONFINISH:

                break;
        }

        return super.onStartCommand(intent, flags, startId);
    }

//在onDestroy()方法中去释放媒体资源
    @Override
    public void onDestroy() {
        super.onDestroy();
        if (mp!=null&&mp.isPlaying()){
            mp.stop();
        }
        if (mp!=null){
            mp.release();
        }
        mp=null;
    }

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

5.在主MainActivity.java中进行相应的操作,主要是点击监听里面。
MainActivity.java中的 public void onClick(View v) {}


    @Override
    public void onClick(View v) {
        //创建Intent对象向service传参
        Intent intent = new Intent();
        //设置class
        intent.setClass(MainActivity.this, MusicService.class);
        switch (v.getId()){
            case R.id.kaishi:
                System.out.println("start");
                //设置携带的数据
                intent.putExtra("flg",1);
                //启动服务
                startService(intent);
                break;

            case R.id.tingzhi:
                intent.putExtra("flg",2);
                //启动服务
                startService(intent);
                break;

            case R.id.zanting:
                intent.putExtra("flg",3);
                //启动服务
                startService(intent);
                break;

            case R.id.finish:
                finish();
                break;

            case R.id.goonfinish:
                //停止服务
                stopService(intent);
                //退出当前Activity
                finish();
                break;
        }
    }
}

6.最重要而且经常最容易忘记的事情,在manifest.xml文件中为MusicService进行注册


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.soft.qianyu.mediaplayerdemo">
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" 
android:supportsRtl="true" 
android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
       <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        intent-filter>
    activity>

        <service
            android:name=".service.MusicService"
            android:enabled="true"
            android:exported="true">
        service>
    application>

有用的是这一块

        <service
            android:name=".service.MusicService"
            android:enabled="true"
            android:exported="true">
        service>

启动测试即可。

你可能感兴趣的:(Android)