900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 安卓实现音乐播放器(暂停 播放)

安卓实现音乐播放器(暂停 播放)

时间:2018-12-18 02:59:02

相关推荐

安卓实现音乐播放器(暂停 播放)

|--效果图

|--依赖3个对象

MediaPlayer:实现音乐播放,暂停,缓冲。

SeekBar:滑动的进度条。

java.util.Timer:定时器,时时更新进度条。

|--main.xml样式文件

[html]view plain copy print ?<spanstyle="font-size:14px;"><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/hello"/><EditTextandroid:id="@+id/mediaFileName"android:layout_width="match_parent"android:text="gangstabop.mp3"android:layout_height="wrap_content"><requestFocus/></EditText><LinearLayoutandroid:id="@+id/linearButton"android:layout_width="match_parent"android:layout_height="wrap_content"><Buttonandroid:id="@+id/playButton"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/stop"/><SeekBarandroid:id="@+id/playSeekBar"android:layout_width="140px"android:layout_height="wrap_content"android:layout_marginLeft="3px"android:layout_marginTop="5px"/><Buttonandroid:id="@+id/replayButton"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="3px"android:text="@string/replay"/></LinearLayout></span><spanstyle="font-size:24px;"></span>

|--Activity实现代码

[java]view plain copy print ?<spanstyle="font-size:14px;">/***@CreateDate-2-3*@Authorhubiao*@Title音乐播放器*/publicclassMediaActivityextendsActivity{privateMediaPlayermediaPlayer;//媒体播放器privateButtonplayButton;privateButtonreplayButton;privatebooleanisCellPlay;/*在挂断电话的时候,用于判断是否为是来电时中断*/privatebooleanisSeekBarChanging;//互斥变量,防止进度条与定时器冲突。privateintcurrentPosition;//当前音乐播放的进度privateSeekBarseekBar;privateTimertimer;privatestaticfinalStringTAG="MediaActivity";@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);//实例化媒体播放器mediaPlayer=newMediaPlayer();//监听滚动条事件seekBar=(SeekBar)findViewById(R.id.playSeekBar);seekBar.setOnSeekBarChangeListener(newMySeekBar());//监听[播放或暂停]事件playButton=(Button)findViewById(R.id.playButton);playButton.setOnClickListener(newPalyListener());//监听[重播]事件replayButton=(Button)findViewById(R.id.replayButton);replayButton.setOnClickListener(newOnClickListener(){publicvoidonClick(Viewv){mediaPlayer.reset();currentPosition=0;play();}});//监听来电事件TelephonyManagerphoneyMana=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);phoneyMana.listen(newmyPhoneStateListener(),PhoneStateListener.LISTEN_CALL_STATE);}/*销毁时释资源*/@OverrideprotectedvoidonDestroy(){mediaPlayer.release();timer.cancel();timer=null;mediaPlayer=null;super.onDestroy();}/*播放或暂停事件处理*/privateclassPalyListenerimplementsOnClickListener{publicvoidonClick(Viewv){if(playButton.getText().toString().equals("播放")){currentPosition=mediaPlayer.getCurrentPosition();//记录播放的位置mediaPlayer.stop();//暂停状态playButton.setText(R.string.stop);timer.purge();//移除所有任务;}else{mediaPlayer.reset();play();}}}/*播放处理*/privatevoidplay(){Filemedia=newFile("/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(newOnPreparedListener(){publicvoidonPrepared(MediaPlayermp){mp.start();mp.seekTo(currentPosition);playButton.setText(R.string.play);seekBar.setMax(mediaPlayer.getDuration());}});//监听播放时回调函数timer=newTimer();timer.schedule(newTimerTask(){@Overridepublicvoidrun(){if(!isSeekBarChanging){seekBar.setProgress(mediaPlayer.getCurrentPosition());}}},0,50);}catch(Exceptione){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();}}/*来电事件处理*/privateclassmyPhoneStateListenerextendsPhoneStateListener{@OverridepublicvoidonCallStateChanged(intstate,StringincomingNumber){switch(state){caseTelephonyManager.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;caseTelephonyManager.CALL_STATE_IDLE://无电话状态if(isCellPlay){isCellPlay=false;mediaPlayer.reset();play();}break;}}}/*进度条处理*/publicclassMySeekBarimplementsOnSeekBarChangeListener{publicvoidonProgressChanged(SeekBarseekBar,intprogress,booleanfromUser){}/*滚动时,应当暂停后台定时器*/publicvoidonStartTrackingTouch(SeekBarseekBar){isSeekBarChanging=true;}/*滑动结束后,重新设置值*/publicvoidonStopTrackingTouch(SeekBarseekBar){isSeekBarChanging=false;mediaPlayer.seekTo(seekBar.getProgress());}}}</span>

|--补充 1:如果mp3在sd中,如播放失败,是否申请sd访问权限或mp3文件是否存在。 2:MediaPlayer对有个别的音频好像不太支持,如果路径正确,权限具备还无法播放,就考虑下音频问题。 3:本案例用到的权限。[html]view plain copy print ?<!--申请SD卡写入权限--><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/><!--申请SD卡创建与权限--><uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/><!--拦截号码权限--><uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。