Android多媒体:MediaPlayer、VideoView组件
2013-08-24 17:07
316 查看
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; // 声明MediaPlayer private MediaPlayer mediaPlayer = null; @Override protected 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() { // 实例化MediaPlayer mediaPlayer = 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() { // 实例化MediaPlayer mediaPlayer = new MediaPlayer(); // 取得assets文件夹下的音频文件 // 取得AssetManager AssetManager 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() { // 实例化MediaPlayer mediaPlayer = 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() { // 实例化MediaPlayer mediaPlayer = 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; // 声明MediaPlayer private MediaPlayer mediaPlayer = null; // 声明SurfaceHolder private SurfaceHolder holder = null; @Override protected 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() { // 实例化MediaPlayer mediaPlayer = new MediaPlayer(); // 取得holder holder = 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显示到SurfaceView mediaPlayer.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; // 声明MediaController private MediaController controller = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.videoview_layout); // 取得组件 vv_showscreen = (VideoView) super.findViewById(R.id.vv_showscreen); // 实例化MediaController controller = 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)、运行效果:
相关文章推荐
- Android平台通过C++的MediaPlayer进行多媒体播放在调用prepare时死锁问题
- Android多媒体应用使用MediaPlayer播放音频
- Android多媒体开发笔记[3]-- 上层mediaPlayer 是如何调到Stagefright的
- Android之多媒体--使用MediaPlayer和SurfaceView播放视频
- android多媒体音乐(MediaPlayer)播放器
- 24、从头学Android之多媒体--使用MediaPlayer播放音频
- 01.Android之多媒体--使用MediaPlayer播放音频02
- Android多媒体编程——MediaPlayer播放音乐
- Android MediaPlayer播放prepareAsync called in state 8解决办法 分类: Android多媒体 2015-01-08 10:16 54人阅读 评论(0) 收藏
- Android多媒体之MediaPlayer
- Android 多媒体框架中Mediaplayer与Opencore的衔接过程
- Android 多媒体框架中Mediaplayer与Opencore的衔接过程
- 从头学Android之多媒体--使用MediaPlayer和SurfaceView播放视频
- 从头学Android之多媒体--使用MediaPlayer和SurfaceView播放视频
- Android开发--多媒体应用开发(一)--MediaPlayer的使用介绍
- 4.10 从头学Android之多媒体--使用MediaPlayer和SurfaceView播放视频
- Android多媒体开发【3】-- 上层mediaPlayer 是如何调到Stagefright的【1】
- Android多媒体之MediaPlayer
- Android开发之MediaPlayer多媒体(音频,视频)播放工具类
- Android 多媒体 MediaPlayer之从三种资源文件中获取数据播放