Android生长之路-音乐播放器的实现(转)

Android成长之路-音乐播放器的实现(转)?strings.xml?xml?version1.0?encodingutf-8???resources

Android成长之路-音乐播放器的实现(转)

?

strings.xml

  • <?xml?version="1.0"?encoding="utf-8"?>??
  • <resources>??
  • ??
  • ????<string?name="app_name">MusicPlayer</string>??
  • ????<string?name="music_name">曲目</string>??
  • ????<string?name="play_text">播放</string>??
  • ????<string?name="pause_text">暂停</string>??
  • ????<string?name="continue_text">继续</string>??
  • ????<string?name="reset_text">重置</string>??
  • ????<string?name="stop_text">停止</string>??
  • ????<string?name="choose_text">选择</string>??
  • ????<string?name="notfoundfile_text">媒体文件不存在</string>??
  • ????<string?name="notfoundSdcard_text">SDcard不存在</string>??
  • ??
  • </resources>??

    ?

    ?

    ?

    main.xml

  • <?xml?version="1.0"?encoding="utf-8"?>??
  • <LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"??
  • ????android:layout_width="fill_parent"??
  • ????android:layout_height="fill_parent"??
  • ????android:orientation="vertical"?>??
  • ??
  • ????<TextView??
  • ????????android:layout_width="fill_parent"??
  • ????????android:layout_height="wrap_content"??
  • ????????android:text="@string/music_name"?/>??
  • ??
  • ????<TableLayout???
  • ????????android:layout_width="fill_parent"??
  • ????????android:layout_height="wrap_content"??
  • ????????android:stretchColumns="0"?>??
  • ??
  • ????????<TableRow?>??
  • ????????<EditText??
  • ????????????android:id="@+id/musicEt"??
  • ????????????android:layout_width="fill_parent"??
  • ????????????android:layout_height="wrap_content"??
  • ????????????android:text="l.mp3"?/>??
  • ??
  • ????????<Button??
  • ????????????android:id="@+id/chooseBtn"??
  • ????????????android:layout_width="wrap_content"??
  • ????????????android:layout_height="wrap_content"??
  • ????????????android:text="@string/choose_text"?/>??
  • ??????????
  • ????????</TableRow>??
  • ????</TableLayout>??
  • ??
  • ????<SeekBar??
  • ????????android:id="@+id/seekBar"??
  • ????????android:layout_width="fill_parent"??
  • ????????android:layout_height="wrap_content"?/>??
  • ????<SeekBar??
  • ????????android:id="@+id/seekBarSound"??
  • ???????android:layout_width="fill_parent"??
  • ????????android:layout_height="wrap_content"??
  • ??????????????android:max="100"????
  • ?????????????android:progress="10"/>????????
  • ??
  • ????????/>??
  • ??????
  • ????<TextView??
  • ????????android:id="@+id/time"??
  • ?????????android:layout_width="fill_parent"??
  • ????????android:layout_height="wrap_content"??
  • ????????/>??
  • ??
  • ????<TableLayout??
  • ????????android:layout_width="fill_parent"??
  • ????????android:layout_height="wrap_content"??
  • ????????android:stretchColumns="*"?>??
  • ??
  • ????????<TableRow?>??
  • ??
  • ????????????<Button??
  • ????????????????android:id="@+id/playBtn"??
  • ????????????????android:layout_width="wrap_content"??
  • ????????????????android:layout_height="wrap_content"??
  • ????????????????android:text="@string/play_text"?/>??
  • ??
  • ????????????<Button??
  • ????????????????android:id="@+id/pauseBtn"??
  • ????????????????android:layout_width="wrap_content"??
  • ????????????????android:layout_height="wrap_content"??
  • ????????????????android:text="@string/pause_text"?/>??
  • ??
  • ????????????<Button??
  • ????????????????android:id="@+id/stopBtn"??
  • ????????????????android:layout_width="wrap_content"??
  • ????????????????android:layout_height="wrap_content"??
  • ????????????????android:text="@string/stop_text"?/>??
  • ????????</TableRow>??
  • ????</TableLayout>??
  • ??
  • </LinearLayout>??

    ?

    MusicPlayerActivity.java

  • package?cn.csdn.playle;??
  • ??
  • import?java.io.File;??
  • import?java.io.IOException;??
  • ??
  • import?android.app.Activity;??
  • import?android.content.Context;??
  • import?android.content.Intent;??
  • import?android.media.AudioManager;??
  • import?android.media.MediaPlayer;??
  • import?android.os.Bundle;??
  • import?android.os.Environment;??
  • import?android.os.Handler;??
  • import?android.util.Log;??
  • import?android.view.View;??
  • import?android.view.View.OnClickListener;??
  • import?android.widget.Button;??
  • import?android.widget.EditText;??
  • import?android.widget.SeekBar;??
  • import?android.widget.SeekBar.OnSeekBarChangeListener;??
  • import?android.widget.TextView;??
  • import?android.widget.Toast;??
  • ??
  • public?class?MusicPlayerActivity?extends?Activity?implements?OnClickListener,??
  • ????????OnSeekBarChangeListener?{??
  • ??
  • ????EditText?musicEt;??
  • ????Button?playBtn,?pauseBtn,?stopBtn,?chooseBtn;??
  • ????TextView?time;??
  • ????AudioManager?audiomanage;??
  • ????int?maxVolume,?currentVolume;??
  • ????SeekBar?seekBar,?seekBarSound;??
  • ????MediaPlayer?player?=?null;??
  • ??
  • ????File?file?=?null;??
  • ??
  • ????int?position?=?0;??
  • ????int?i?=?0;??
  • ????Handler?handler?=?new?Handler();??
  • ??
  • ??
  • ????public?void?onCreate(Bundle?savedInstanceState)?{??
  • ????????super.onCreate(savedInstanceState);??
  • ????????setContentView(R.layout.main);??
  • ??
  • ????????player?=?new?MediaPlayer();??
  • ??
  • ????????findViews();??
  • ????}??
  • ??
  • ????private?void?findViews()?{??
  • ????????musicEt?=?(EditText)?this.findViewById(R.id.musicEt);??
  • ????????playBtn?=?(Button)?this.findViewById(R.id.playBtn);??
  • ????????pauseBtn?=?(Button)?this.findViewById(R.id.pauseBtn);??
  • ????????stopBtn?=?(Button)?this.findViewById(R.id.stopBtn);??
  • ????????chooseBtn?=?(Button)?this.findViewById(R.id.chooseBtn);??
  • ????????seekBar?=?(SeekBar)?this.findViewById(R.id.seekBar);??
  • ????????seekBarSound?=?(SeekBar)?this.findViewById(R.id.seekBarSound);??
  • ????????time?=?(TextView)?this.findViewById(R.id.time);??
  • ??
  • ??
  • ????????time.setOnClickListener(this);??
  • ????????playBtn.setOnClickListener(this);??
  • ????????pauseBtn.setOnClickListener(this);??
  • ????????stopBtn.setOnClickListener(this);??
  • ????????stopBtn.setEnabled(false);??
  • ????????pauseBtn.setEnabled(false);??
  • ??
  • ????????seekBar.setOnSeekBarChangeListener(this);??
  • ??
  • ????????chooseBtn.setOnClickListener(new?OnClickListener()?{??
  • ??
  • ????????????public?void?onClick(View?v)?{??
  • ??
  • ????????????????Intent?intent?=?new?Intent(MusicPlayerActivity.this,??
  • ????????????????????????MusicListActivity.class);??
  • ????????????????startActivity(intent);??
  • ????????????}??
  • ????????});??
  • ??
  • ????????audiomanage?=?(AudioManager)?getSystemService(Context.AUDIO_SERVICE);??
  • ????????maxVolume?=?audiomanage.getStreamMaxVolume(AudioManager.STREAM_MUSIC);?//?获取系统最大音量??
  • ????????seekBarSound.setMax(maxVolume);?//?拖动条最高值与系统最大声匹配??
  • ????????currentVolume?=?audiomanage.getStreamVolume(AudioManager.STREAM_MUSIC);?//?获取当前值??
  • ????????seekBarSound.setProgress(currentVolume);??
  • ??
  • ????????seekBarSound.setOnSeekBarChangeListener(new?OnSeekBarChangeListener()?//?调音监听器??
  • ????????????????{??
  • ????????????????????public?void?onProgressChanged(SeekBar?arg0,?int?progress,??
  • ????????????????????????????boolean?fromUser)?{??
  • ????????????????????????audiomanage.setStreamVolume(AudioManager.STREAM_MUSIC,??
  • ????????????????????????????????progress,?0);??
  • ????????????????????????currentVolume?=?audiomanage??
  • ????????????????????????????????.getStreamVolume(AudioManager.STREAM_MUSIC);?//?获取当前值??
  • ????????????????????????seekBarSound.setProgress(currentVolume);??
  • ??
  • ????????????????????}??
  • ??
  • ????????????????????public?void?onStartTrackingTouch(SeekBar?seekBar)?{??
  • ??????????????????????????
  • ????????????????????}??
  • ??
  • ????????????????????public?void?onStopTrackingTouch(SeekBar?seekBar)?{??
  • ??????????????????????????
  • ????????????????????}??
  • ????????????????});??
  • ??
  • ????????Intent?intent?=?this.getIntent();??
  • ????????String?name?=?intent.getStringExtra("name");??
  • ????????musicEt.setText(name);??
  • ????}??
  • ??
  • ????public?void?onClick(View?v)?{??
  • ??
  • ????????String?fileName?=?musicEt.getText().toString().trim();??
  • ??
  • ????????//?获取sdcard的状态是否已加载?(MEDIA_MOUNTED?加载状态)??
  • ????????if?(Environment.getExternalStorageState().equals(??
  • ????????????????Environment.MEDIA_MOUNTED))?{??
  • ????????????file?=?new?File(Environment.getExternalStorageDirectory(),?fileName);??
  • ??
  • ????????????//?判断所播放的媒体文件是否存在??
  • ????????????if?(file.exists())?{??
  • ??
  • ????????????????try?{??
  • ????????????????????switch?(v.getId())?{//?返回一个int值??
  • ??
  • ????????????????????case?R.id.playBtn:??
  • ????????????????????????playMusic(file);??
  • ??
  • ????????????????????????break;??
  • ??
  • ????????????????????case?R.id.pauseBtn:??
  • ????????????????????????if?(player.isPlaying())?{??
  • ????????????????????????????player.pause();??
  • ????????????????????????????pauseBtn.setText(R.string.continue_text);??
  • ????????????????????????}?else?{??
  • ????????????????????????????player.start();??
  • ????????????????????????????pauseBtn.setText(R.string.pause_text);??
  • ????????????????????????}??
  • ????????????????????????break;??
  • ??
  • ????????????????????case?R.id.stopBtn:??
  • ????????????????????????player.stop();??
  • ????????????????????????stopBtn.setEnabled(false);??
  • ????????????????????????seekBar.setProgress(0);??
  • ????????????????????????if?(playBtn.getText().toString().equals("重置"))?{??
  • ????????????????????????????playBtn.setText(R.string.play_text);??
  • ????????????????????????}??
  • ????????????????????????if?(pauseBtn.getText().toString().equals("继续"))?{??
  • ????????????????????????????pauseBtn.setText(R.string.pause_text);??
  • ????????????????????????????pauseBtn.setEnabled(false);??
  • ????????????????????????}?else?{??
  • ????????????????????????????pauseBtn.setEnabled(false);??
  • ????????????????????????}??
  • ??
  • ????????????????????????break;??
  • ??
  • ????????????????????}??
  • ????????????????}?catch?(IllegalArgumentException?e)?{??
  • ????????????????????Log.e("TAG",?e.toString());??
  • ????????????????}?catch?(IllegalStateException?e)?{??
  • ????????????????????Log.e("TAG",?e.toString());??
  • ????????????????}?catch?(IOException?e)?{??
  • ????????????????????Log.e("TAG",?e.toString());??
  • ????????????????}??
  • ????????????}?else?{??
  • ????????????????Toast.makeText(this,?R.string.notfoundfile_text,??
  • ????????????????????????Toast.LENGTH_LONG).show();??
  • ????????????}??
  • ????????}??
  • ??
  • ????????else?{??
  • ????????????Toast.makeText(this,?R.string.notfoundSdcard_text,??
  • ????????????????????Toast.LENGTH_LONG).show();??
  • ????????}??
  • ????}??
  • ??
  • ????protected?void?onDestroy()?{??
  • ????????if?(player?!=?null)?{??
  • ????????????if?(player.isPlaying())?{??
  • ????????????????player.stop();??
  • ????????????}??
  • ????????????player.release();??
  • ????????}??
  • ????????super.onDestroy();??
  • ????}??
  • ??
  • ????protected?void?onPause()?{??
  • ????????if?(player?!=?null)?{??
  • ????????????if?(player.isPlaying())?{??
  • ????????????????player.pause();??
  • ????????????}??
  • ????????}??
  • ????????super.onPause();??
  • ????}??
  • ??
  • ????private?void?playMusic(File?file)?throws?IllegalStateException,?IOException?{??
  • ??
  • ????????if?(musicEt.getText().toString()?==?null??
  • ????????????????||?"".equals(musicEt.getText().toString()))?{??
  • ????????????Toast.makeText(this,?"没有选中歌曲",?Toast.LENGTH_LONG).show();??
  • ????????}?else?{??
  • ????????????if?(player?!=?null)?{??
  • ????????????????pauseBtn.setEnabled(true);??
  • ??
  • ????????????????player.reset();??
  • ????????????????player.setDataSource(file.getAbsolutePath());??
  • ????????????????player.prepare();??
  • ????????????????player.start();??
  • ????????????????playBtn.setText(R.string.reset_text);??
  • ????????????????run();??
  • ????????????}??
  • ????????????if?(playBtn.getText().toString().equals("重置"))?{??
  • ????????????????pauseBtn.setEnabled(true);??
  • ????????????????stopBtn.setEnabled(true);??
  • ??
  • ????????????}??
  • ????????????if?(pauseBtn.getText().toString().equals("继续"))?{??
  • ????????????????pauseBtn.setText(R.string.pause_text);??
  • ????????????}??
  • ??
  • ????????}??
  • ????}??
  • ??
  • ????private?void?run()?{??
  • ????????new?Thread(new?Runnable()?{??
  • ????????????public?void?run()?{??
  • ????????????????while?(player?!=?null)?{??
  • ????????????????????int?TIME?=?player.getDuration();??
  • ????????????????????seekBar.setMax(TIME);//?获取歌曲的最大值??
  • ????????????????????position?=?player.getCurrentPosition();//?返回当前播放进度值??
  • ????????????????????seekBar.setProgress(position);??
  • ??
  • ????????????????????try?{??
  • ????????????????????????Thread.sleep(3000);??
  • ????????????????????}?catch?(InterruptedException?e)?{??
  • ????????????????????????e.printStackTrace();??
  • ????????????????????}??
  • ??
  • ????????????????}??
  • ????????????}??
  • ??
  • ????????}).start();??
  • ????}??
  • ??
  • ????public?void?onProgressChanged(SeekBar?seekBar,?int?progress,??
  • ????????????boolean?fromUser)?{??
  • ??
  • ????}??
  • ??
  • ????public?void?onStartTrackingTouch(SeekBar?seekBar)?{??
  • ??
  • ????????player.seekTo(seekBar.getProgress());??
  • ??
  • ????}??
  • ??
  • ????public?void?onStopTrackingTouch(SeekBar?seekBar)?{??
  • ??
  • ????????player.seekTo(seekBar.getProgress());??
  • ????}??
  • ??
  • } ??
  • ?

    ?

    效果图:

    Android生长之路-音乐播放器的实现(转)

    ?