안드로이드 MP3 플레이어 개발 실례(2)의 음악 재생
<span style="font-size:18px;"> </span><span style="font-family: Arial, Helvetica, sans-serif;font-size:18px;"> MP3 MP3 。 , , 。 ( ), 。</span>
재생 인터페이스에는 세 가지 상태인'시작','정지','정지'를 대표하는 단추가 있는데 이 세 가지 단추 중 하나를 클릭하면 재생 서비스에 작용한다.먼저 다음 세 버튼의 스니퍼 이벤트를 살펴보십시오.
시작:
class BeginListener implements OnClickListener{
@Override
public void onClick(View arg0) {
Toast.makeText(PlayActivity.this, " ",Toast.LENGTH_SHORT).show();
//
stopMusic = false;
Intent intent = new Intent();
//intent
intent.setClass(PlayActivity.this, PlayService.class);
intent.putExtra("mp3Info", mp3Info);
intent.putExtra("MSG", AppConstant.PlayerMsg.PLAY_MSG);
//
preparelrc(mp3Info.getLrcName());
startService(intent);
//
bindService(intent, conn,BIND_AUTO_CREATE);
//Runnable , handler ,
handler.post(updateTimeCallback);
start = System.currentTimeMillis();
isPlaying = true;
}
}
목록 인터페이스에서 전송된 MP3의 파일 정보와 현재 상태(재생 상태인 AppConstant.PlayerMsg.PLAY MSG)를 Intent 객체에 불러온 다음 재생 서비스 PlayService를 켜서 Intent가 가지고 있는 객체를 이 서비스로 전송합니다.가사 초기화, 재생 서비스 귀속 작용, 가사 업데이트 부분은 다음 편에서 자세히 설명하고 오늘은 어떤 작용인지 알면 된다.
멈추는 것과 멈추는 것도 기본적으로 같다.
일시 중지:
class PauseListener implements OnClickListener{
@Override
public void onClick(View arg0) {
Intent intent = new Intent();
//intent
intent.setClass(PlayActivity.this, PlayService.class);
intent.putExtra("mp3Info", mp3Info);
intent.putExtra("MSG", AppConstant.PlayerMsg.PAUSE_MSG);
startService(intent);
if(isPlaying){
Toast.makeText(PlayActivity.this, " ",Toast.LENGTH_SHORT).show();
//
handler.removeCallbacks(updateTimeCallback);
pauseTime = System.currentTimeMillis();
}else{
//Runnable , handler ,
handler.postDelayed(updateTimeCallback, 5);
Toast.makeText(PlayActivity.this, " ",Toast.LENGTH_SHORT).show();
start = System.currentTimeMillis() - pauseTime+start;//
}
isPlaying = isPlaying?false:true;
}
}
중지:
class StopListener implements OnClickListener{
@Override
public void onClick(View arg0) {
Toast.makeText(PlayActivity.this, " ",Toast.LENGTH_SHORT).show();
stopMusic = true;
seekBar.setProgress(0);
Intent intent = new Intent();
intent.setClass(PlayActivity.this, PlayService.class);
intent.putExtra("mp3Info", mp3Info);
intent.putExtra("MSG", AppConstant.PlayerMsg.STOP_MSG);
startService(intent);
//
handler.removeCallbacks(updateTimeCallback);
}
}
재생 서비스의 코드를 보십시오.
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if(intent.getIntExtra("progress", 0) != 0){///////////////////////
if(isPlay){
//
int progress = intent.getIntExtra("progress", 0);
if(progress != 0)
mediaPlayer.seekTo(progress*totalLength/100);
}
}//////////////////////////
else{
mp3Info = (MP3Info) intent.getSerializableExtra("mp3Info");
int MSG = intent.getIntExtra("MSG", 0);
if(mp3Info != null){
if(MSG == AppConstant.PlayerMsg.PLAY_MSG){
play(mp3Info);
}
else if(MSG == AppConstant.PlayerMsg.PAUSE_MSG){
pause();
}
else if(MSG == AppConstant.PlayerMsg.STOP_MSG){
stop();
}
}
}
return super.onStartCommand(intent, flags, startId);
}
start 서비스 ()가 호출되면 서비스 실례가 만들어지고 서비스의 onStart Command () 방법이 호출됩니다. 이 방법에서 진도표의 진도에 대해서는 다음 편에서 자세히 설명합니다.여기서 이 방법은 주로 재생 인터페이스에서 전해오는 Intent 대상을 얻어 Intent 대상이 가지고 있는 재생 상태에 대한 정보를 얻는다.그리고 상태에 따라 다른 방법을 사용한다.
재생 시작:
public void play(MP3Info mp3Info){
if(!isPlay){
// mp3
String path = getPath(mp3Info);
// MP3 MediaPlayer
mediaPlayer = MediaPlayer.create(PlayService.this,Uri.parse("file://"+path));
//
totalLength = mediaPlayer.getDuration();/////////////////////
//
mediaPlayer.setLooping(false);
//
mediaPlayer.start();
//
isPlay = true;
isStop = false;
}
}
일시 중지:
public void pause(){
if(mediaPlayer != null){
if(!isStop){
if(!isPause){
mediaPlayer.pause();
isPause = true;
}
else{
mediaPlayer.start();
isPause = false;
}
}
}
}
public void stop(){
if(isPlay)
if(!isStop){
mediaPlayer.stop();
mediaPlayer.release();
isStop = true;
//
}
isPlay = false;
}
재생에서 선택한 MP3 파일 경로를 가져오는 방법 getPath ():
public String getPath(MP3Info mp3Info){
String SDPath = Environment.getExternalStorageDirectory().getAbsolutePath();
String path = SDPath + File.separator+"MP3"+File.separator+mp3Info.getMp3Name();
return path;
}
자, 이해하기 어렵지 않습니다. 다음 편에서는 가사 표시와 진도표를 중점적으로 다루고 방송 진도를 조정하는 부분도 가장 복잡한 부분입니다.전체 프로젝트의 원본 코드는 다음 블로그에서 제시될 것이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.