郑州app开发android音乐播放器实例。布局代码是一个imagebutton和seekbar。
下面是java代码
MainActivity.java
package cn.xhhkj.musiccyd;
import androidx.appcompat.app.AppCompatActivity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.view.View;
import android.widget.ImageButton;
import android.widget.SeekBar;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "结果是";
private static final int UPDATE_PROGRESS = 0;
public String path = "mnt/sdcard/Music/pingguo.mp3";
private ImageButton ib_play;
private SeekBar sb_progress;
private MusicPlayerService.MyBinder musicController;
private MyConnection conn;
private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case UPDATE_PROGRESS:
updateProgress();
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ib_play = findViewById(R.id.musicbutton);
sb_progress = findViewById(R.id.seekBar);
sb_progress.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if(fromUser){
musicController.seekTo(progress);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
Intent service = new Intent(this,MusicPlayerService.class);
startService(service);
conn = new MyConnection();
bindService(service, conn, BIND_AUTO_CREATE);
}
public void play(View view) {
// MediaPlayer player = new MediaPlayer();
// try {
// player.setDataSource(path);
// player.prepare();
// player.start();
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
musicController.playPause();
updatePlayIcon();
}
class MyConnection implements ServiceConnection{
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
musicController = (MusicPlayerService.MyBinder) service;
updatePlayIcon();
sb_progress.setMax(musicController.getDuration());
sb_progress.setProgress(musicController.getCurrentPosition());
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
}
private void updatePlayIcon(){
if(musicController.isPlaying()){
ib_play.setImageResource(R.drawable.pause);
handler.sendEmptyMessage(UPDATE_PROGRESS);
}else{
ib_play.setImageResource(R.drawable.play);
handler.removeMessages(UPDATE_PROGRESS);
}
}
@Override
protected void onStop() {
super.onStop();
handler.removeCallbacksAndMessages(null);
}
@Override
protected void onDestroy() {
super.onDestroy();
unbindService(conn);
}
@Override
protected void onResume() {
super.onResume();
if(musicController!=null){
handler.sendEmptyMessage(UPDATE_PROGRESS);
}
}
private void updateProgress(){
int currentPosition = musicController.getCurrentPosition();
sb_progress.setProgress(currentPosition);
handler.sendEmptyMessageDelayed(UPDATE_PROGRESS, 500);
}
}
MusicPlayerService.java
package cn.xhhkj.musiccyd;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Binder;
import android.os.IBinder;
import androidx.annotation.Nullable;
public class MusicPlayerService extends Service {
private MediaPlayer player;
private String path = "mnt/sdcard/Music/pingguo.mp3";
@Nullable
@Override
public IBinder onBind(Intent intent) {
return new MyBinder();
}
public class MyBinder extends Binder {
public void playPause(){
if(player.isPlaying()){
player.pause();
}else{
player.start();
}
}
public boolean isPlaying(){
return player.isPlaying();
}
public int getDuration(){
return player.getDuration();
}
public int getCurrentPosition(){
return player.getCurrentPosition();
}
public void seekTo(int msec){
player.seekTo(msec);
}
}
@Override
public void onCreate() {
super.onCreate();
player = new MediaPlayer();
try {
player.setDataSource(path);
player.prepare();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}