Android 服务与多线程——编写简单的音乐播放器程序

这篇博客介绍了如何使用Android的MediaPlayer、Service和多线程技术来开发一个简单的音乐播放器。实验目标包括学会使用MediaPlayer、实现播放控制,使用Handler更新UI,以及使用Service进行后台播放。博主详细讲解了从创建MediaPlayer对象到实现播放、暂停、停止功能的步骤,并通过Service保持后台播放。此外,还分享了遇到的困难,即音乐播放结束后事件触发的解决方案,以及项目的主要文件结构。
摘要由CSDN通过智能技术生成

Android 服务与多线程——编写简单的音乐播放器程序

一、实验目的

1)       学会使用MediaPlayer;

2)       学会简单的多线程编程,使用Handler更新UI;

3)       学会使用Service进行后台工作;

4)       学会使用Service与Activity进行通信。

二、实验要求

1)     实现音乐文件的播放控制(仅需要播放,暂停和停止)

2)     利用Handler更新播放进度

3)     利用Service开启(停止)后台服务进行后台播放

 

三、使用环境

Eclipse,Android 2.3

 

四、调试过程、代码解析及运行截图

1.向sdcard中添加音乐:

1)启动模拟器,打开DDMS视图;

2)选择FileExplorer标签页;

3)选择sdcard目录后点击右上角的push按钮即可。如下图:


 

2.创建MediaPlayer的对象,并利用控制条更新播放进度:

1)创建MediaPlayer及Handler:

        MediaPlayermPlayer = new MediaPlayer();
 
        Handler handler = new Handler(); 
        RunnableupdateThread = new Runnable(){ 
        public void run() { 
            //获得歌曲现在播放位置并设置成播放进度条的值 
            seekbar.setProgress(mPlayer.getCurrentPosition()); 
            //每次延迟100毫秒再启动线程 
            handler.postDelayed(updateThread, 100); 
        } 

2)初始化音乐:

       try {
           mPlayer.setDataSource("/sdcard/test.mp3"); //选择资源
            mPlayer.prepare();                           //准备就绪
            text.setText("初始化歌曲...");
        } catch (IOException e){
            text.setText("初始异常");
            e.printStackTrace();
}
        //获取音乐的总长度以设置进度条的最大长度
        seekbar.setMax(mPlayer.getDuration());   
 mPlayer.setOnCompletionListener(complete);

3)对开始/暂停键事件触发:

       privateImageButton.OnClickListenerbtn_play = new         ImageButton.OnClickListener(){
 
       @Override
       public void onClick(View arg0) {
       //TODOAuto-generated method stub
       try { 
               if(mPlayer !=null)  { 
               if(mPlayer.isPlaying()) {     //判断是否正在播放
                    mPlayer.pause();          //暂停播放器
                    handler.post(updateThread); //使用handler的post方法用于更新
                       bn_play.setImageDrawable(getResources().getDrawable(R.drawable.play));
                     text.setText("已暂停");   //更新图标
                   } 
               else if(!mPlayer.isPlaying())  { 
                    mPlayer.start();         //继续播放音乐
                    handler.post(updateThread);
                    bn_play.setImageDrawable(getResources().getDrawable(R.drawable.pause));
                     text.setText("播放中"); 
                   } 
               } 
              } catch (Exception e) { 
                     text.setText("播放/暂停异常"); 
                     e.printStackTrace(); 
              }
       }
       
};


4)对停止键的事件触发:

private ImageButton.OnClickListenerbtn_stop = new ImageButton.OnClickListener(){
 
       @Override
       public void onClick(View arg0) {
           // TODO Auto-generated methodstub
           try{
              if(mPlayer.isPlaying()){
                  text.setText("已停止");  //更新文字提示
              }
              else {
                  text.setText("初始化歌曲...");
              }
              mPlayer.stop();              //停止播放音乐
              handler.removeCallbacks(updateThread);
              bn_play.setImageDrawable(getResources().getDrawable(R.drawable.play));
              mPlayer.reset();             //恢复至初始状态
               mPlayer.setDataSource("/sdcard/test.mp3");
              mPlayer.prepare();
           } catch (Exception e){
              text.setText("停止异常");
              e.printStackTrace();
           }
       }
};


 

5)退出的事件触发

   private Button.OnClickListenerbtn_exit = new Button.OnClickListener(){
 
       @Override
       public void onClick(View arg0) {
           // TODO Auto-generated methodstub
            onDestroy();                  
       }
};
 
    @Override
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值