先看示例:
MusiceService代码
package mm.shandong.com.testsimplemedia.service; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.AssetFileDescriptor; import android.content.res.AssetManager; import android.media.MediaPlayer; import android.os.IBinder; public class MusicService extends Service { int currentMusic = 0;//0表示没有音乐播放,1表示暂停,2表示正在播放, int status; MediaPlayer mp; String[] musics = new String[]{"first.mp3", "second.mp3", "third.mp3"}; AssetManager am; public MusicService() { } @Override public void onCreate() { am = getAssets(); mp = new MediaPlayer(); mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mediaPlayer) { currentMusic++; currentMusic = currentMusic % musics.length; playMusic(); status = 2; Intent intentTemp = new Intent("Update_Music_State"); intentTemp.putExtra("status", status); intentTemp.putExtra("currentMusic", currentMusic); sendBroadcast(intentTemp); } }); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("Get_Music_Control"); ///动态注册播放器变化的广播接收者 MusicServiceReceiver musicServiceReceiver = new MusicServiceReceiver(); registerReceiver(musicServiceReceiver, intentFilter); super.onCreate(); } public class MusicServiceReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { int control = intent.getIntExtra("control", 0); switch (control) { case 0: //暂停 if (status == 2) { mp.pause(); status = 1; } break; case 1: ///播放 if (status == 0) { playMusic(); status = 2; } else if (status == 1) { mp.start(); status = 2; } break; case 3: break; case 4: //上一首 if (status == 0) { if (currentMusic == 0) { currentMusic = 2; } else { currentMusic--; } } else if (status == 1) { if (currentMusic == 0) { currentMusic = 2; } else { currentMusic--; } status = 0; } else if (status == 2) { if (currentMusic == 0) { currentMusic = 2; } else { currentMusic--; } playMusic(); } break; case 5: //下一首 if (status == 0) { if (currentMusic == 2) { currentMusic = 0; } else { currentMusic++; } } else if (status == 1) { if (currentMusic == 2) { currentMusic = 0; } else { currentMusic++; } status = 0; } else if (status == 2) { if (currentMusic == 2) { currentMusic = 0; } else { currentMusic++; } playMusic(); } break; } Intent intentTemp = new Intent("Update_Music_State"); intentTemp.putExtra("status", status); intentTemp.putExtra("currentMusic", currentMusic); sendBroadcast(intentTemp); } } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. throw new UnsupportedOperationException("Not yet implemented"); } public void playMusic() { try { AssetFileDescriptor ad = am.openFd(musics[currentMusic]); mp.reset(); mp.setDataSource(ad.getFileDescriptor(), ad.getStartOffset(), ad.getLength()); // mp.create(this,musics[currentMusic]); mp.prepare(); mp.start(); } catch (Exception e) { e.printStackTrace(); } } }
TestSimpleMediaActivity 代码
package mm.shandong.com.testsimplemedia; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.ImageButton; import android.widget.TextView; import mm.shandong.com.testsimplemedia.service.MusicService; public class TestSimpleMediaActivity extends AppCompatActivity { ImageButton imageButton; TextView textViewMp3Name; TextView textViewMp3Author; int status = 0; String[] authors = new String[]{"张三", "李四", "王二"}; String[] names = new String[]{"first", "second", "thrid"}; int currentMusic = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_simple_media); imageButton = (ImageButton) findViewById(R.id.imageButton); textViewMp3Name = (TextView) findViewById(R.id.textViewMp3Name); textViewMp3Author = (TextView) findViewById(R.id.textViewMp3Author); imageButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent("Get_Music_Control"); if (status == 2) { intent.putExtra("control", 0); } else { intent.putExtra("control", 1); } sendBroadcast(intent); } }); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("Update_Music_State"); MusicStatusReceiver musicStatusReceiver = new MusicStatusReceiver(); //动态注册activity变化的广播接收者 registerReceiver(musicStatusReceiver, intentFilter); Intent intent = new Intent(this, MusicService.class); startService(intent); Intent intentMusicReceiver = new Intent("Get_Music_Control"); intentMusicReceiver.putExtra("control", 3); sendBroadcast(intentMusicReceiver); } ///上一首 public void preMusic(View view) { Intent intentMusicReceiver = new Intent("Get_Music_Control"); intentMusicReceiver.putExtra("control", 4); sendBroadcast(intentMusicReceiver); } ///下一首 public void nextMusic(View view) { Intent intentMusicReceiver = new Intent("Get_Music_Control"); intentMusicReceiver.putExtra("control", 5); sendBroadcast(intentMusicReceiver); } ///定义操作音乐的广播接收者 public class MusicStatusReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { status = intent.getIntExtra("status", 0); currentMusic = intent.getIntExtra("currentMusic", 0); switch (status) { case 0: textViewMp3Name.setText(names[currentMusic]); textViewMp3Author.setText(authors[currentMusic]); imageButton.setBackgroundResource(R.drawable.play32); break; case 1: textViewMp3Name.setText(names[currentMusic]); textViewMp3Author.setText(authors[currentMusic]); imageButton.setBackgroundResource(R.drawable.play32); break; case 2: imageButton.setBackgroundResource(R.drawable.pause32); textViewMp3Name.setText(names[currentMusic]); textViewMp3Author.setText(authors[currentMusic]); break; } } } }
布局文件代码:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin"> <ImageButton android:id="@+id/imageButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textViewMp3Author" android:layout_alignStart="@+id/textViewMp3Author" android:layout_below="@+id/textViewMp3Author" android:background="@drawable/play32" /> <TextView android:id="@+id/textViewMp3Name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:text="歌曲名称" android:textSize="30sp" /> <TextView android:id="@+id/textViewMp3Author" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textViewMp3Name" android:layout_centerHorizontal="true" android:text="作者" android:textSize="15sp" /> <Button android:id="@+id/button10" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/imageButton" android:layout_toLeftOf="@+id/textViewMp3Name" android:layout_toStartOf="@+id/textViewMp3Name" android:onClick="preMusic" android:text="上一首" /> <Button android:id="@+id/button11" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/imageButton" android:layout_toEndOf="@+id/textViewMp3Name" android:layout_toRightOf="@+id/textViewMp3Name" android:onClick="nextMusic" android:text="下一首" /> </RelativeLayout>
[color=red]如果想要源码,请留下邮箱。[/color]
Demo下载
最后,以上例子都来源与安卓无忧,请去应用宝或者豌豆荚下载:http://android.myapp.com/myapp/detail.htm?apkName=com.shandong.mm.androidstudy,源码例子文档一网打尽。