android菜鸟进阶之路——播放音乐和视频

首先先认识一下播放音乐的程序代码:在布局文件中,定义3个按钮,开始,和停止。布局文件十分简单,如下所示:
         <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=" http://schemas.android.com/apk/res/android "

    android:layout_width="match_parent"

    android:layout_height="match_parent" >


<Button

        android:id="@+id/play"

        android:layout_width="0dp"

        android:layout_height="wrap_content"

        android:layout_weight="1"

        android:text="Play" />

<Button

        android:id="@+id/pause"

        android:layout_width="0dp"

        android:layout_height="wrap_content"

        android:layout_weight="1"

        android:text="Pause" />

<Button

        android:id="@+id/stop"

        android:layout_width="0dp"

        android:layout_height="wrap_content"

        android:layout_weight="1"

        android:text="Stop" />


</LinearLayout>
        下面是活动的代码,是实现播放音乐的核心,具体的代码解释在注释中:
        public class FiveActivity extends Activity implements OnClickListener {
                 private Button play;
                 private Button pause;
                 private Button stop;                                // 定义3个按钮
                 private MediaPlayer mediaPlayer = new MediaPlayer();     // 实例化MediaPlayer对象,MediaPlayer是系统内部类
                 @Override
                 protected void onCreate(Bundle savedInstanceState) {
                          // TODO Auto-generated method stub
                          super.onCreate(savedInstanceState);
                          setContentView(R.layout.activity_play_media);
                          play = (Button) findViewById(R.id.play);
                          pause = (Button) findViewById(R.id.pause);
                          stop = (Button) findViewById(R.id.stop);
                          play.setOnClickListener(this);
                          pause.setOnClickListener(this);                // 注意点击事件的不同形式,这样写上面要继承OnClickListener 接口
                          stop.setOnClickListener(this);
                          initMediaPlayer(); //  初始化MediaPlayer
                 }

                 private void initMediaPlayer() {
                          // TODO Auto-generated method stub
                          try {
                                    // 第一个参数是地址,第二个参数是文件名称,即sd卡下面必须有一个叫做music.mp3 的文件
                                   File file = new File(Environment.getExternalStorageDirectory(),"music.mp3");
                                   mediaPlayer.setDataSource(file.getPath());      //  指定音频文件的路径 ,调用播放器
                                   mediaPlayer.prepare(); //  让MediaPlayer进入到准备状态
                          } catch (Exception e) {
                                   // TODO Auto-generated catch block
                                   e.printStackTrace();
                          }
                 }

                 @Override
                 public void onClick(View v) {
                          // TODO Auto-generated method stub
                          switch (v.getId()) {
                                  case R.id.play:
                                           if (!mediaPlayer.isPlaying()) {
                                                    mediaPlayer.start(); // 开始播放
                                           }
                                           break;
                                  case R.id.pause:
                                           if (mediaPlayer.isPlaying()) {
                                                    mediaPlayer.pause(); // 暂停播放
                                           }
                                           break;
                                  case R.id.stop:
                                           if (mediaPlayer.isPlaying()) {
                                                    mediaPlayer.reset(); // 停止播放
                                                    initMediaPlayer();    // 让MediaPlayer进入到准备状态,意思是从头开始播放
                                           }
                                           break;
                                  default:
                                           break;
                          }
                 }

                 @Override
                 protected void onDestroy() {
                          // TODO Auto-generated method stub
                          super.onDestroy();
                          if (mediaPlayer != null) {
                               mediaPlayer.stop();
                               mediaPlayer.release();                // 释放资源
                          }
                 }
        }
        总体来说,播放器的调用还是比较简单的,没有难以理解的代码,只要是初始化播放器的方法中关于播放器的调用,其实视频的播放和音频的播放时大同小异的,不过 mp4 3gp 是android支持的视频格式,主要代码也贴下面:
    在布局文件中,除了3个按钮之外,还定义了一个VideoView用来播放视频,全部代码如下:
     <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=" http://schemas.android.com/apk/res/android "

    android:layout_width="match_parent"

    android:layout_height="match_parent" 

    android:orientation="vertical">


    <VideoView

            android:id="@+id/video_view"

            android:layout_width="match_parent"

            android:layout_height="wrap_content" />

    

    <LinearLayout 

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        >

        <Button

                android:id="@+id/playvideo"

                android:layout_width="0dp"

                android:layout_height="wrap_content"

                android:layout_weight="1"

                android:text="Play" />

        <Button

                android:id="@+id/pausevideo"

                android:layout_width="0dp"

                android:layout_height="wrap_content"

                android:layout_weight="1"

                android:text="Pause" />

        <Button

                android:id="@+id/replayvideo"

                android:layout_width="0dp"

                android:layout_height="wrap_content"

                android:layout_weight="1"

                android:text="Stop" />

        </LinearLayout>


</LinearLayout>
下面是活动的代码,是实现播放视频的核心,具体的代码解释在注释中:
public class SixActivity extends Activity implements OnClickListener {
          // 注意, VideoView在android已经封装好了,依id获取后即可调用相应功能,这点与MediaPlayer略有差别,不需new 对象
         private VideoView videoView;
         private Button playvideo;
         private Button pausevideo;
         private Button replayvideo;
         @Override
         protected void onCreate(Bundle savedInstanceState) {
                  // TODO Auto-generated method stub
                  super.onCreate(savedInstanceState);
                  setContentView(R.layout.activity_play_video);
                  playvideo = (Button) findViewById(R.id.playvideo);
                  pausevideo = (Button) findViewById(R.id.pausevideo);
                  replayvideo = (Button) findViewById(R.id.replayvideo);
                  videoView = (VideoView) findViewById(R.id.video_view);
                  playvideo.setOnClickListener(this);
                  pausevideo.setOnClickListener(this);
                  replayvideo.setOnClickListener(this);                                 // 实例化全部的按钮和点击事件
                  initVideoPath(); //  初始化MediaPlayer
         }

         private void initVideoPath() {
                  // TODO Auto-generated method stub
                  try {
                             // 第一个参数是地址,第二个参数是文件名称,即sd卡下面必须有一个叫做vedio.3gp 的文件
                           File file = new File(Environment.getExternalStorageDirectory(),"vedio.3gp");
                           videoView.setVideoPath(file.getPath()); //  指定视频文件的路径
                  } catch (Exception e) {
                           // TODO Auto-generated catch block
                           e.printStackTrace();
                  }
         }
         @Override
         public void onClick(View v) {
                  // TODO Auto-generated method stub
                  switch (v.getId()) {
                          case R.id.playvideo:
                                   if (!videoView.isPlaying()) {
                                            videoView.start(); // 开始播放
                                   }
                                   break;
                          case R.id.pausevideo:
                                   if (videoView.isPlaying()) {
                                            videoView.pause(); // 暂时播放
                                   }
                                   break;
                          case R.id.replayvideo:
                                   if (videoView.isPlaying()) {
                                            videoView.resume(); // 重新播放
                                   }
                                   break;
                          default:
                                   break;
                          }
                 }
         @Override
         protected void onDestroy() {
                  // TODO Auto-generated method stub
                  super.onDestroy();
                  if (videoView != null) {
                           videoView.suspend();              //中止播放,将 VideoView 所占用的 资源释放掉。
                  }
         }
}
         总体来说,播放器的调用和音频的播放是大同小异的,其实VideoView 只是帮我们做了一个很好的封装而已,它的背 后仍然是使用 MediaPlayer 来对视频文件进行控制的。另外需要注意,VideoView 并不是一 个万能的视频播放工具类,它在视频格式的支持以及播放效率方面都存在着较大的不足。
        共同进步。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值