音乐播放器android教学,android音乐播放器实例

郑州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();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值