您的位置:首页 > 移动开发 > Android开发

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)、运行效果:



 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: