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)、运行效果:
- Android多媒体:MediaPlayer、VideoView组件
- android MediaPlayer VideoView
- Android多媒体之MediaPlayer
- Android多媒体-MediaPlayer生命周期
- Android 多媒体开发 MediaPlayer
- Android多媒体之MediaPlayer
- Android MediaPlayer(多媒体播放)
- Android -多媒体之MediaPlayer
- Android多媒体开发 android mediaplayer
- Android多媒体开发之MediaPlayer
- Android多媒体-MediaPlayer使用方式
- Android入门笔记 - 多媒体 - MediaPlayer
- Android-多媒体之MediaPlayer原理
- Android 多媒体MediaPlayer使用详解
- Android 多媒体MediaPlayer使用详解
- Android之MediaPlayer——VideoView
- android MediaPlayer和VideoView的使用
- Android MediaPlayer和VideoView的使用
- wpf组态图相关技术
- Linux系统性能调优那些事儿
- asp生成静态HTML
- Pro Android学习笔记(十八):用户界面和控制(6):Adapter和AdapterView
- BeanNameUrlHandlerMapping与MultiActionController
- Android多媒体:MediaPlayer、VideoView组件
- hdu 2179 pi 母函数
- Hadoop环境搭建和Hello World
- 透视WPF 应用程序的利器
- Deep Learning 优化小结
- [Windows Azure IaaS]实现虚机之间的内部互连
- android开发action bar中menu菜单action overflow问题
- JAVA第十二弹(内部类和匿名内部类)
- 在Web站点中创建和使用Rss源