Android多媒体:MediaPlayer、VideoView组件

来源:互联网 发布:淘宝密码破解工具 编辑:程序博客网 时间:2024/06/15 01:01

 

Android中MediaPlayer和VideoView的使用

 

1、MediaPlayer的使用

 

1.1、使用MediaPlayer播放音乐

 

1.1.1、播放资源文件中的音乐

在res目录下建立一个文件夹raw,该文件夹专门存放音频文件,在raw文件夹中放入一个喜欢的音频文件dongfengpo_jaychou.mp3,音频文件必须是英文,如图:

1)、新建布局文件,布局文件中只有三个按钮组件,分别是播放,暂停,停止按钮。

<?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="horizontal" >    <Button     android:id="@+id/btn_play"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="播放"    android:onClick="btnOnClick"/><Button     android:id="@+id/btn_pause"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="暂停"    android:onClick="btnOnClick"/><Button     android:id="@+id/btn_stop"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="停止"    android:onClick="btnOnClick"/></LinearLayout>

 

2)、新建Activity类

package com.example.mediaplayerdemo2;import java.io.File;import java.io.IOException;import android.app.Activity;import android.content.res.AssetFileDescriptor;import android.content.res.AssetManager;import android.media.MediaPlayer;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.Toast;public class MediaPlayerFromRawActivity extends Activity {// 声明组件private Button btn_play = null;private Button btn_pause = null;private Button btn_stop = null;// 声明MediaPlayerprivate MediaPlayer mediaPlayer = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);super.setContentView(R.layout.mediaplayer_raw_layout);// 取得组件btn_play = (Button) super.findViewById(R.id.btn_play);btn_pause = (Button) super.findViewById(R.id.btn_pause);btn_stop = (Button) super.findViewById(R.id.btn_stop);}// 设置单击事件public void btnOnClick(View view) {switch (view.getId()) {case R.id.btn_play:playFromRaw();//调用播放方法break;case R.id.btn_pause:pause();//调用暂停方法break;case R.id.btn_stop:stop();//调用停止方法break;default:break;}}// 播放音乐,该音乐来自资源文件raw文件夹下public void playFromRaw() {// 实例化MediaPlayermediaPlayer = new MediaPlayer();// 加载音频文件mediaPlayer.create(MediaPlayerFromRawActivity.this,R.raw.dongfengpo_jaychou);// 开始播放mediaPlayer.start();Log.i("tag", "正在播放音乐");}// 暂停方法,暂停播放音乐public void pause() {mediaPlayer.pause();Log.i("tag", "暂停播放音乐");}// 停止方法,停止播放音乐public void stop() {mediaPlayer.stop();Log.i("tag", "停止播放音乐");}}


 3)、运行结果:

运行效果没有什么变化,只有听得到美妙的音乐:

 

1.1.2、播放assets文件夹下的音乐

 播放assets文件夹下的音乐跟播放raw中的有所不同,布局文件和Activity都大致下同,只是把不同的地方写在方法中:

// 播放音乐,该音乐来自assets文件夹下public void playFromAssets() {// 实例化MediaPlayermediaPlayer = new MediaPlayer();// 取得assets文件夹下的音频文件// 取得AssetManagerAssetManager assetManager = getAssets();try {// 取得音频文件AssetFileDescriptor descriptor = assetManager.openFd("dongfengpo_jaychou.mp3");// 加载音频,但还未完全准备mediaPlayer.setDataSource(descriptor.getFileDescriptor());// 真正加载,准备播放mediaPlayer.prepare();// 开始播放mediaPlayer.start();Log.i("tag", "正在播放音乐");} catch (Exception e) {e.printStackTrace();}}


 

1.1.3、播放SDCard中的音乐

 

//播放音乐,该音乐来自SDCard下public void playFromSDCard() {// 实例化MediaPlayermediaPlayer = new MediaPlayer();// 判断SDCard是否存在if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {// SDCard不存在,显示提示信息Toast.makeText(MediaPlayerFromRawActivity.this, "SDCard不存在",Toast.LENGTH_SHORT).show();} else {// SDCard存在// 获取SDCard路径File file = Environment.getExternalStorageDirectory();try {// 取得路径下的文件String path = file.getCanonicalPath()+ "/dongfengpo_jaychou.mp3";// 加载文件mediaPlayer.setDataSource(path);// 真正加载文件,准备播放mediaPlayer.prepare();// 启动播放mediaPlayer.start();Log.i("tag", "正在播放");} catch (IOException e) {e.printStackTrace();}}}


 

1.1.4、播放网络音乐

 

// 播放来之网络歌曲public void playFromUri() {// 实例化MediaPlayermediaPlayer = new MediaPlayer();// 网络歌曲地址Uri uri = Uri.parse("http://mp3.exofanclub.com/mp3-4/2013/07/16/0a947c3fb5a879fef5742951f0231459.mp3");try {// 加载资源mediaPlayer.setDataSource(MediaPlayerFromRawActivity.this, uri);// 准备mediaPlayer.prepare();// 启动mediaPlayer.start();Log.i("tag", "正在播放");} catch (Exception e) {e.printStackTrace();}}


1.2、MediaPlayer播放视频

使用MediaPlayer播放视频跟播放音乐不够差不多。

不同的是,视频是有画面的,需要一个SurfaceView来显示视频。

所以只演示播放SDCard中的视频。SurfaceView组件中把视频文件换成音频文件也可以播放。

1.2.1、播放SDCard中的视频

1)、新建布局文件,

<?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" >    <SurfaceView        android:id="@+id/sv_showscreen"        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="1" />    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="horizontal" >        <Button            android:id="@+id/btn_playsv"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:onClick="btnOnClick"            android:text="播放" />        <Button            android:id="@+id/btn_pausesv"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:onClick="btnOnClick"            android:text="暂停" />        <Button            android:id="@+id/btn_stopsv"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:onClick="btnOnClick"            android:text="停止" />    </LinearLayout></LinearLayout>


 

2)、新建Activity类

package com.example.mediaplayerdemo2;import java.io.File;import java.io.IOException;import android.app.Activity;import android.content.res.AssetFileDescriptor;import android.content.res.AssetManager;import android.media.AudioManager;import android.media.MediaPlayer;import android.os.Bundle;import android.os.Environment;import android.util.Log;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;import android.widget.Button;import android.widget.Toast;public class MediaPlayeDemoActivity extends Activity {// 声明组件private Button btn_playsv = null;private Button btn_pausesv = null;private Button btn_stopsv = null;private SurfaceView sv_showscreen = null;// 声明MediaPlayerprivate MediaPlayer mediaPlayer = null;// 声明SurfaceHolderprivate SurfaceHolder holder = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);super.setContentView(R.layout.mediaplayer_layout);// 取得组件btn_playsv = (Button) super.findViewById(R.id.btn_playsv);btn_pausesv = (Button) super.findViewById(R.id.btn_pausesv);btn_stopsv = (Button) super.findViewById(R.id.btn_stopsv);sv_showscreen = (SurfaceView) super.findViewById(R.id.sv_showscreen);}// 设置单击事件public void btnOnClick(View view) {switch (view.getId()) {case R.id.btn_playsv:playFromSDCard();// 调用播放方法break;case R.id.btn_pausesv:pause();// 调用暂停方法break;case R.id.btn_stopsv:stop();// 调用停止方法break;default:break;}}//public void playFromSDCard() {// 实例化MediaPlayermediaPlayer = new MediaPlayer();// 取得holderholder = sv_showscreen.getHolder();// 设置SurfaceView类型holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);// 判断SDCard是否存在if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {// SDCard不存在,显示提示信息Toast.makeText(MediaPlayeDemoActivity.this, "SDCard不存在",Toast.LENGTH_SHORT).show();} else {// SDCard存在// 获取SDCard路径File file = Environment.getExternalStorageDirectory();try {// 取得路径下的文件String path = file.getCanonicalPath() + "/oppo.3gp";// 加载文件mediaPlayer.setDataSource(path);// 设置MediaPlayer显示到SurfaceViewmediaPlayer.setDisplay(holder);// 设置MediaPlayer音频流类型mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);// 真正加载文件,准备播放mediaPlayer.prepare();// 启动播放mediaPlayer.start();Log.i("tag", "正在播放");} catch (IOException e) {e.printStackTrace();}}}// 暂停方法,暂停播放public void pause() {mediaPlayer.pause();Log.i("tag", "暂停播放");}// 停止方法,停止播放public void stop() {mediaPlayer.stop();Log.i("tag", "停止播放");}}


3)、运行效果:

 

 

2、VideoView组件

 

2.1、ViewView播放视频

使用VideoView播放视频文件,播放SDCard中的视频文件

 1)、新建布局文件

<?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/vv_showscreen"        android:layout_width="match_parent"        android:layout_height="match_parent" /></LinearLayout>


 

2)、新建Activity类

package com.example.mediaplayerdemo2;import java.io.File;import java.io.IOException;import android.app.Activity;import android.os.Bundle;import android.os.Environment;import android.widget.MediaController;import android.widget.Toast;import android.widget.VideoView;public class VideoViewDemoActivity extends Activity {// 声明组件private VideoView vv_showscreen = null;// 声明MediaControllerprivate MediaController controller = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);super.setContentView(R.layout.videoview_layout);// 取得组件vv_showscreen = (VideoView) super.findViewById(R.id.vv_showscreen);// 实例化MediaControllercontroller = new MediaController(VideoViewDemoActivity.this);// 取得SDCard中视频// 判断SDCard是否存在if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {// SDCard不存在,则提示不存在Toast.makeText(VideoViewDemoActivity.this, "SDCard不存在",Toast.LENGTH_SHORT).show();} else {// SDCard存在,// 取得视频路径File file = Environment.getExternalStorageDirectory();try {String path = file.getCanonicalPath() + "/oppo.3gp";// 设置视频路径vv_showscreen.setVideoPath(path);// 设置VideoView的控制器vv_showscreen.setMediaController(controller);//VideoView获取焦点vv_showscreen.requestFocus();// 启动播放vv_showscreen.start();} catch (IOException e) {e.printStackTrace();}}}}


 

3)、运行效果:

 

原创粉丝点击