`

Android提高第一篇之MediaPlayer

阅读更多
http://blog.csdn.net/hellogv/archive/2010/10/30/5975864.aspx
前面写了十四篇关于界面的入门文章,大家都看完和跟着练习之后,对于常用的Layout和View都会有一定的了解了,接下来的文章就不再强调介绍界面了,而是针对具体的常见功能而展开。

        本文介绍MediaPlayer的使用。MediaPlayer可以播放音频和视频,另外也可以通过VideoView来播放视频,虽然VideoView比MediaPlayer简单易用,但定制性不如用MediaPlayer,要视情况选择了。MediaPlayer播放音频比较简单,但是要播放视频就需要SurfaceView。SurfaceView比普通的自定义View更有绘图上的优势,它支持完全的OpenGL ES库。

         先贴出本文程序运行结果的截图,上面是播放/停止音频,可用SeekBar来调进度,下面是播放/停止视频,也是用SeekBar来调进度:



main.xml的源码:
<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout android:id="@+id/LinearLayout01"  
    android:layout_width="fill_parent" android:layout_height="fill_parent"  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:orientation="vertical">  
    <SeekBar android:id="@+id/SeekBar01" android:layout_height="wrap_content"  
        android:layout_width="fill_parent"></SeekBar>  
    <LinearLayout android:id="@+id/LinearLayout02"  
        android:layout_width="wrap_content" android:layout_height="wrap_content">  
        <Button android:id="@+id/Button01" android:layout_width="wrap_content"  
            android:layout_height="wrap_content" android:text="播放音频"></Button>  
        <Button android:id="@+id/Button02" android:layout_width="wrap_content"  
            android:layout_height="wrap_content" android:text="停止播放"></Button>  
    </LinearLayout>  
    <SeekBar android:id="@+id/SeekBar02" android:layout_height="wrap_content"  
        android:layout_width="fill_parent"></SeekBar>  
  
    <SurfaceView android:id="@+id/SurfaceView01"  
        android:layout_width="fill_parent" android:layout_height="250px"></SurfaceView>  
    <LinearLayout android:id="@+id/LinearLayout02"  
        android:layout_width="wrap_content" android:layout_height="wrap_content">  
        <Button android:layout_width="wrap_content"  
            android:layout_height="wrap_content" android:id="@+id/Button03"  
            android:text="播放视频"></Button>  
        <Button android:layout_width="wrap_content"  
            android:layout_height="wrap_content" android:text="停止播放" android:id="@+id/Button04"></Button>  
    </LinearLayout>  
</LinearLayout>  

本文程序的源码,有点长:
package com.testMedia;  
  
import java.io.IOException;    
import java.util.Timer;  
import java.util.TimerTask;  
import android.app.Activity;    
import android.media.AudioManager;  
import android.media.MediaPlayer;  
import android.os.Bundle;    
import android.view.SurfaceHolder;  
import android.view.SurfaceView;  
import android.view.View;    
import android.widget.Button;    
import android.widget.SeekBar;  
import android.widget.Toast;    
  
  
public class testMedia extends Activity {  
      /** Called when the activity is first created. */   
  
    private SeekBar skb_audio=null;  
    private Button btn_start_audio = null;    
    private Button btn_stop_audio = null;  
  
    private SeekBar skb_video=null;  
    private Button btn_start_video = null;    
    private Button btn_stop_video = null;  
    private SurfaceView surfaceView;   
    private SurfaceHolder surfaceHolder;   
      
    private MediaPlayer m = null;    
    private Timer mTimer;  
    private TimerTask mTimerTask;  
      
    private boolean isChanging=false;//互斥变量,防止定时器与SeekBar拖动时进度冲突  
     @Override    
    public void onCreate(Bundle savedInstanceState) {    
        super.onCreate(savedInstanceState);    
        setContentView(R.layout.main);    
          
        //----------Media控件设置---------//  
        m=new MediaPlayer();  
          
        //播放结束之后弹出提示  
        m.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){  
            @Override  
            public void onCompletion(MediaPlayer arg0) {  
                Toast.makeText(testMedia.this, "结束", 1000).show();  
                m.release();  
            }  
        });  
          
      //----------定时器记录播放进度---------//  
        mTimer = new Timer();  
        mTimerTask = new TimerTask() {  
            @Override  
            public void run() {   
                if(isChanging==true)  
                    return;  
                  
                if(m.getVideoHeight()==0)  
                    skb_audio.setProgress(m.getCurrentPosition());  
                else   
                    skb_video.setProgress(m.getCurrentPosition());  
            }  
        };  
  
        mTimer.schedule(mTimerTask, 0, 10);  
          
        btn_start_audio = (Button) this.findViewById(R.id.Button01);    
        btn_stop_audio = (Button) this.findViewById(R.id.Button02);    
        btn_start_audio.setOnClickListener(new ClickEvent());  
        btn_stop_audio.setOnClickListener(new ClickEvent());  
        skb_audio=(SeekBar)this.findViewById(R.id.SeekBar01);  
        skb_audio.setOnSeekBarChangeListener(new SeekBarChangeEvent());  
          
        btn_start_video = (Button) this.findViewById(R.id.Button03);    
        btn_stop_video = (Button) this.findViewById(R.id.Button04);    
        btn_start_video.setOnClickListener(new ClickEvent());  
        btn_stop_video.setOnClickListener(new ClickEvent());  
        skb_video=(SeekBar)this.findViewById(R.id.SeekBar02);  
        skb_video.setOnSeekBarChangeListener(new SeekBarChangeEvent());  
        surfaceView = (SurfaceView) findViewById(R.id.SurfaceView01);  
        surfaceHolder = surfaceView.getHolder();  
        surfaceHolder.setFixedSize(100, 100);  
        surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);  
    }    
       
  /* 
   * 按键事件处理 
   */  
  class ClickEvent implements View.OnClickListener{  
    @Override  
    public void onClick(View v) {  
        if(v==btn_start_audio)  
        {  
            m.reset();//恢复到未初始化的状态  
            m=MediaPlayer.create(testMedia.this, R.raw.big);//读取音频  
            skb_audio.setMax(m.getDuration());//设置SeekBar的长度  
            try {                     
                m.prepare();    //准备  
            } catch (IllegalStateException e) {           
                // TODO Auto-generated catch block                
                e.printStackTrace();                  
            } catch (IOException e) {             
                // TODO Auto-generated catch block                
                e.printStackTrace();                  
            }         
            m.start();  //播放  
        }  
        else if(v==btn_stop_audio || v==btn_stop_video)  
        {  
            m.stop();  
        }  
        else if(v==btn_start_video)  
        {  
            m.reset();//恢复到未初始化的状态  
            m=MediaPlayer.create(testMedia.this, R.raw.test);//读取视频  
            skb_video.setMax(m.getDuration());//设置SeekBar的长度  
            m.setAudioStreamType(AudioManager.STREAM_MUSIC);  
            m.setDisplay(surfaceHolder);//设置屏幕  
              
            try {  
                m.prepare();  
                  
            } catch (IllegalArgumentException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            } catch (IllegalStateException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            } catch (IOException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
            m.start();  
        }  
    }  
  }  
    
  /* 
   * SeekBar进度改变事件 
   */  
  class SeekBarChangeEvent implements SeekBar.OnSeekBarChangeListener{  
  
    @Override  
    public void onProgressChanged(SeekBar seekBar, int progress,  
            boolean fromUser) {  
        // TODO Auto-generated method stub  
          
    }  
  
    @Override  
    public void onStartTrackingTouch(SeekBar seekBar) {  
        isChanging=true;  
    }  
  
    @Override  
    public void onStopTrackingTouch(SeekBar seekBar) {  
        m.seekTo(seekBar.getProgress());  
        isChanging=false;     
    }  
        
  }  
  
}  
  • 大小: 42 KB
分享到:
评论

相关推荐

    Android提高第一篇之MediaPlayer.docx

    在Android应用开发中,`MediaPlayer`是一个核心组件,用于播放音频和视频文件。它可以处理各种格式的媒体文件,包括本地存储的资源和网络流媒体。`MediaPlayer`提供了丰富的控制功能,如播放、暂停、停止、快进、...

    Android提高第一篇之MediaPlayer.doc

    在Android应用开发中,多媒体播放是一个常见的需求,而`MediaPlayer`类就是处理音频和视频播放的核心组件。本篇文章将深入探讨如何使用`MediaPlayer`来实现音频和视频的播放,并结合`SurfaceView`进行详细讲解。 ...

    Android开发提高

    #### Android提高第一篇之MediaPlayer MediaPlayer在Android开发中扮演着至关重要的角色,它不仅能够播放音频,还能处理视频播放任务。对于初学者而言,掌握MediaPlayer的基本操作是提升Android开发技能的重要一环...

    android MediaPlayer播放视频网络URL,asset目录下文件,本地视频文件

    在Android开发中,`MediaPlayer`类是用于播放各种媒体文件的核心组件。它可以处理音频、视频流,支持多种格式,如MP3、AAC、MPEG-4等。在本教程中,我们将深入探讨如何使用`MediaPlayer`播放网络URL、Asset目录下的...

    Android MediaPlayer研究问题

    在Android开发中,MediaPlayer是一个非常重要的组件,它用于播放各种媒体资源,如音频和视频文件。这个组件在处理多媒体内容时提供了丰富的功能,但同时也伴随着一些常见问题和挑战。这篇博客"Android MediaPlayer...

    MediaPlayer(Android音视频播放器)

    初始化MediaPlayer对象是使用它的第一步。通常,我们需要通过`new MediaPlayer()`创建一个实例,然后调用`setDataSource()`来设置要播放的媒体文件路径。例如: ```java MediaPlayer mediaPlayer = new MediaPlayer...

    Android MediaPlayer使用方法简单介绍

    首先,创建`MediaPlayer`对象是使用它的第一步。通常,我们通过调用`MediaPlayer.create()`静态方法来初始化,传入上下文`Context`和媒体资源的URI。例如: ```java MediaPlayer mediaPlayer = MediaPlayer.create...

    Android MediaPlayer Playback---多媒体开发应用程序接口

    Android提供了多种API来处理音频、视频和图像,其中之一就是`MediaPlayer`类。这个强大的工具允许开发者播放本地或网络上的媒体文件,为用户创建各种多媒体应用提供了便利。 `MediaPlayer`是Android SDK中的核心...

    TextureView+Mediaplayer实现本地视频播放

    本篇将深入探讨如何使用`TextureView`结合`MediaPlayer`来实现在Android应用中播放本地视频。`TextureView`提供了一个高效且灵活的方式显示图像数据,而`MediaPlayer`是Android系统提供的多媒体播放器,支持多种格式...

    Android的MediaPlayer架构介绍.pdf

    第一部分 MediaPlayer 概述 MediaPlayer 在 Android 系统中扮演着非常重要的角色,它包含了音频和视频的播放功能。在 Android 的界面上,Music 和 Video 两个应用程序都是调用 MediaPlayer 实现的。 MediaPlayer 在...

    Mediaplayer视频播放

    首先,创建`MediaPlayer`对象是播放视频的第一步。你可以通过`MediaPlayer.create()`方法来初始化,传入上下文(Context)和视频资源的URI。例如: ```java MediaPlayer mediaPlayer = MediaPlayer.create(this, R....

    Android提高篇-OPhoneAndroid手机开发.doc

    `MediaPlayer` 是Android系统提供的一个用于播放音频和视频的类。它支持多种音频和视频格式,包括MP3、AAC、WAV等音频格式,以及MP4、3GP等视频格式。在使用 `MediaPlayer` 时,首先需要初始化并设置数据源,然后...

    android rtsp播放DEMO

    1. **初始化MediaPlayer**:创建`MediaPlayer`对象,然后调用`setDataSource()`方法,传入RTSP地址。例如: ```java MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource("rtsp://your....

    MediaPlayer

    创建`MediaPlayer`对象通常是第一步: ```java MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.video_file); ``` 接着,播放视频: ```java mediaPlayer.start(); ``` 暂停时: ```java ...

    使用MediaPlayer播放音频文件

    在Android开发中,`MediaPlayer` 是一个非常重要的组件,它用于播放各种音频和视频文件。本文将深入探讨`MediaPlayer`的使用,特别是如何利用它来播放音频文件。 首先,我们来了解一下`MediaPlayer`的基本概念。`...

    Android使用MediaPlayer和TextureView实现视频无缝切换

    当一个视频播放完毕后,可以通过`mediaPlayer.pause()`、`mediaPlayer.reset()`来停止并重置`MediaPlayer`,然后加载下一个视频,同时更新`ImageView`的`Bitmap`为新视频的第一帧。整个过程在主线程之外执行,以避免...

    MeidaPlayer播放视频音量调整Dmeo

    在Android开发中,MediaPlayer是一个非常重要的组件,它用于播放各种媒体资源,如音频和视频文件。在这个名为"MeidaPlayer播放视频音量调整Demo"的项目中,我们将深入探讨如何利用MediaPlayer来播放视频并实现音量的...

    MediaPlayer class.zip 移动开发 / Android

    在Android平台上,`MediaPlayer`类是系统提供的一个核心组件,用于播放各种音频和视频资源。这个类的强大之处在于它的灵活性,能够处理多种媒体格式,并且提供了丰富的控制接口,使得开发者可以方便地集成到自己的...

    Android音乐动态频谱显示demo(点击频谱区域可改变频谱样式共5种) 代码有注释

    - `MediaPlayer`类:这是Android系统提供的一个核心组件,用于播放音频文件。在demo中,它可能被用来加载和控制音源的播放。 - `AudioTrack`类:对于更底层的音频处理,开发者可能也会使用`AudioTrack`来播放...

    MediaPlayer和SurfaceView的结合使用

    这时,我们可以利用Android提供的其他组件和API,如VideoView(它集成了SurfaceView和MediaPlayer),或者是更强大的第三方库,例如HZExoPlayer。HZExoPlayer是一个流行的Android视频播放库,它基于ExoPlayer,提供...

Global site tag (gtag.js) - Google Analytics