展会信息港展会大全

Android MediaPlayer的使用
来源:互联网   发布日期:2015-09-29 10:22:14   浏览:3367次  

导读:本文介绍Android MediaPlayer的 使用,MediaPlayer可以播放音频和视频,另外也可以通过VideoView来播放视频,虽然VideoView比MediaPlayer简单易 用,但定制性不如用MediaPlayer,要视情况选择了。MediaPlayer......

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

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

main.xml的源码:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/LinearLayout01"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

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;

}

}

}

赞助本站

人工智能实验室

相关热词: Android MediaPlayer

相关内容
AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港