效果
1.自定义类继承Service
package day01.bw.com.musicplay;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Binder;
import android.os.IBinder;
import java.io.IOException;
import java.util.List;
public class MusicService extends Service {
MediaPlayer mediaPlayer;
@Override
public IBinder onBind(Intent intent) {
return new MyBind();
}
public class MyBind extends Binder{
public MusicService getMusicService(){
return MusicService.this;
}
}
@Override
public void onCreate() {
super.onCreate();
}
public void musicPlay(List<Song> songs,int index){
try {
if(mediaPlayer==null){
mediaPlayer = new MediaPlayer();
mediaPlayer.reset();
mediaPlayer.setDataSource(songs.get(index).getData());
mediaPlayer.prepare();
}
mediaPlayer.start();
} catch (IOException e) {
e.printStackTrace();
}
}
public void musicPause(){
if(mediaPlayer!=null){
mediaPlayer.pause();
}
}
public void musicStop(){
if(mediaPlayer!=null){
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer=null;
}
}
public void musicNext(List<Song> songs,int index){
musicStop();
musicPlay(songs,index);
}
public void musicPrivous(List<Song> songs,int index){
musicStop();
musicPlay(songs,index);
}
public int getCurrent(){
if(mediaPlayer!=null){
int positon = mediaPlayer.getCurrentPosition();
int duration = mediaPlayer.getDuration();
return positon*100/duration;
}
return 0;
}
public void setPositon(int progress){
if(mediaPlayer!=null)
mediaPlayer.seekTo(mediaPlayer.getDuration()*progress/100);
}
}
2.Activity代码实现
package day01.bw.com.musicplay;
import android.app.Service;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Intent;
import android.content.ServiceConnection;
import android.database.Cursor;
import android.net.Uri;
import android.os.IBinder;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.SeekBar;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends AppCompatActivity {
CheckBox checkBox;
List<Song> songs = new ArrayList<>();
ContentResolver resolver;
Uri uri;
TextView playing;
MusicService musicService;
ListView listView;
int index = 0;
SeekBar seekBar;
ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
musicService = ((MusicService.MyBind)service).getMusicService();
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(MainActivity.this,MusicService.class);
bindService(intent,connection, Service.BIND_AUTO_CREATE);
seekBar = findViewById(R.id.seekBar);
checkBox = findViewById(R.id.start);
playing = findViewById(R.id.playing);
listView = findViewById(R.id.listView);
resolver = getContentResolver();
uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor cursor = resolver.query(uri, null, null, null, null, null);
while(cursor.moveToNext()){
String title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));
String data = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
songs.add(new Song(title,artist,duration,data));
}
MyAdapter myAdapter = new MyAdapter(songs,this);
listView.setAdapter(myAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
musicService.musicStop();
musicService.musicPlay(songs,position);
checkBox.setChecked(true);
index = position;
Song song = songs.get(index);
playing.setText(song.getTitle());
}
});
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
musicService.musicPlay(songs,index);
}else{
musicService.musicPause();
}
}
});
}
public void next(View view){
if(index==songs.size()-1){
index=0;
}else{
index++;
}
musicService.musicNext(songs,index);
checkBox.setChecked(true);
Song song = songs.get(index);
playing.setText(song.getTitle());
}
public void privous(View view){
if(index==0){
index=songs.size()-1;
}else{
index--;
}
musicService.musicPrivous(songs,index);
checkBox.setChecked(true);
Song song = songs.get(index);
playing.setText(song.getTitle());
}
}