안드로이드 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;
	}
   
자, 이해하기 어렵지 않습니다. 다음 편에서는 가사 표시와 진도표를 중점적으로 다루고 방송 진도를 조정하는 부분도 가장 복잡한 부분입니다.전체 프로젝트의 원본 코드는 다음 블로그에서 제시될 것이다.

좋은 웹페이지 즐겨찾기