안 드 로 이 드 음악 재생 기 진도 바 효과 구현

본 논문 의 사례 는 안 드 로 이 드 가 음악 재생 기 진도 바 효 과 를 실현 하 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
효과 도

3 개체 의존
MediaPlayer:음악 재생,일시 정지,버퍼 링 을 실현 합 니 다.
SeekBar:미 끄 러 지 는 진도.
java.util.Timer:타이머,진도 바 를 수시로 업데이트 합 니 다.
main.xml 스타일 파일

<TextView 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="@string/hello" /> 
 
 <EditText 
 android:id="@+id/mediaFileName" 
 android:layout_width="match_parent" 
 android:text="gangstabop.mp3" 
 android:layout_height="wrap_content" > 
 <requestFocus /> 
 </EditText> 
 
 
 <LinearLayout 
 android:id="@+id/linearButton" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" > 
 
 <Button 
 android:id="@+id/playButton" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="@string/stop" /> 
 
 <SeekBar 
 android:id="@+id/playSeekBar" 
 android:layout_width="140px" 
 android:layout_height="wrap_content" 
 android:layout_marginLeft="3px" 
 android:layout_marginTop="5px" /> 
 
 <Button 
 android:id="@+id/replayButton" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_marginLeft="3px" 
 android:text="@string/replay" /> 
 </LinearLayout>
Activity 구현 코드

/** 
 * @CreateDate 2015-2-3 
 * @Author hubiao 
 * @Title       
 */ 
public class MediaActivity extends Activity { 
 private MediaPlayer mediaPlayer;//      
 private Button playButton; 
 private Button replayButton ; 
 private boolean isCellPlay;/*        ,             */ 
 private boolean isSeekBarChanging;//    ,           。 
 private int currentPosition;//          
 private SeekBar seekBar; 
 private Timer timer; 
 
 private static final String TAG = "MediaActivity"; 
 
 @Override 
 public void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.main); 
 
 //         
 mediaPlayer = new MediaPlayer(); 
 
 //        
 seekBar = (SeekBar) findViewById(R.id.playSeekBar); 
 seekBar.setOnSeekBarChangeListener(new MySeekBar()); 
 
 //   [     ]   
 playButton= (Button) findViewById(R.id.playButton); 
 playButton.setOnClickListener(new PalyListener()); 
 
 //  [  ]   
 replayButton= (Button) findViewById(R.id.replayButton); 
 replayButton.setOnClickListener(new OnClickListener() { 
 public void onClick(View v) { 
 mediaPlayer.reset(); 
 currentPosition = 0; 
 play(); 
 } 
 }); 
 
 //       
 TelephonyManager phoneyMana = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
 phoneyMana.listen(new myPhoneStateListener(),PhoneStateListener.LISTEN_CALL_STATE); 
 } 
 /*      */ 
 @Override 
 protected void onDestroy() { 
 mediaPlayer.release(); 
 timer.cancel(); 
 timer = null; 
 mediaPlayer = null; 
 super.onDestroy(); 
 } 
 
 /*         */ 
 private class PalyListener implements OnClickListener { 
 public void onClick(View v) { 
 if(playButton.getText().toString().equals("  ")) 
 { 
 currentPosition = mediaPlayer.getCurrentPosition();//        
 mediaPlayer.stop();//     
 playButton.setText(R.string.stop); 
 timer.purge();//      ; 
 } 
 else{ 
 mediaPlayer.reset(); 
 play(); 
 } 
 } 
 } 
 
 /*    */ 
 private void play() { 
 File media = new File("/mnt/sdcard/files/","bewithyou.mp3");//     ,  mp3      
 Log.i(TAG, media.getAbsolutePath()); 
 if(media.exists()) 
 { 
 try { 
 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);//       
 mediaPlayer.setDataSource(media.getAbsolutePath());//  mp3    
 mediaPlayer.prepareAsync();//     
 /*       ,      ,    */ 
 mediaPlayer.setOnPreparedListener(new OnPreparedListener() { 
  public void onPrepared(MediaPlayer mp) { 
  mp.start(); 
  mp.seekTo(currentPosition); 
  playButton.setText(R.string.play); 
  seekBar.setMax(mediaPlayer.getDuration()); 
  } 
 }); 
 //          
 timer = new Timer(); 
 timer.schedule(new TimerTask() { 
  @Override 
  public void run() { 
  if(!isSeekBarChanging){ 
  seekBar.setProgress(mediaPlayer.getCurrentPosition()); 
  } 
  } 
 },0,50); 
 } catch (Exception e) { 
 Toast.makeText(getApplicationContext(), R.string.playError, Toast.LENGTH_LONG).show(); 
 e.printStackTrace(); 
 System.out.println(e); 
 } 
 } 
 else{ 
 Toast.makeText(getApplicationContext(), R.string.fileError, Toast.LENGTH_LONG).show(); 
 } 
 } 
 
 /*      */ 
 private class myPhoneStateListener extends PhoneStateListener 
 { 
 @Override 
 public void onCallStateChanged(int state, String incomingNumber) { 
 switch (state) { 
 case TelephonyManager.CALL_STATE_RINGING://  ,       
 if(mediaPlayer.isPlaying() && playButton.getText().toString().equals("  ")){ 
  currentPosition = mediaPlayer.getCurrentPosition();//        
  mediaPlayer.stop(); 
  isCellPlay = true;//               
  playButton.setText(R.string.stop); 
  timer.purge();//       ; 
 } 
 break; 
 case TelephonyManager.CALL_STATE_IDLE://      
 if(isCellPlay){ 
  isCellPlay = false; 
  mediaPlayer.reset(); 
  play(); 
 } 
 break; 
 } 
 } 
 } 
 
 /*     */ 
 public class MySeekBar implements OnSeekBarChangeListener{ 
 
 public void onProgressChanged(SeekBar seekBar, int progress, 
 boolean fromUser) { 
 } 
 
 /*   ,         */ 
 public void onStartTrackingTouch(SeekBar seekBar) { 
 isSeekBarChanging = true; 
 } 
 /*     ,     */ 
 public void onStopTrackingTouch(SeekBar seekBar) { 
 isSeekBarChanging = false; 
 mediaPlayer.seekTo(seekBar.getProgress()); 
 } 
 } 
} 
보충:
1.mp3 가 sd 에서 재생 에 실패 하면 sd 접근 권한 이나 mp3 파일 이 존재 하 는 지 여부 입 니 다.
2.MediaPlayer 는 개별 오디 오 를 지원 하지 않 는 것 같 습 니 다.경로 가 정확 하고 재생 할 수 없 는 권한 이 있 으 면 오디 오 문 제 를 고려 하 십시오.
3.본 사례 에 사용 되 는 권한.

<!--   SD      --> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<!--  SD       --> 
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> 
<!--        --> 
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기