新建一个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()),没有提示的话自己敲(详细代码在后面)。
MediaPlayer mp = MediaPlayer.create(Context c , int resId);
int flag = intent.getIntExtras("",-1);
switch(flag){
case START :
//ToDo Something
break ;
}
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>
启动测试即可。