- 浏览: 335653 次
最新评论
-
ax003d:
你好,我使用这种方法,在gridview里显示图片,当图片数量 ...
ScrollView嵌套GridView、ListView的解决办法 -
yunzhu:
Firefox下有Xmarks书签同步插件,很好用,可以方便地 ...
开发人员应该具备的工具----欲善其事,先利其器 -
mjlixm:
Android入门:ContentProvider 学习了! ...
Android入门:ContentProvider -
bluesky329:
很好收益匪浅!
一个软件工程师的经验之谈 -
qinglongyun:
每天工作4小时的程序员
本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!
前面写了十四篇关于界面的入门文章,大家都看完和跟着练习之后,对于常用的Layout和View都会有一定的了解了,接下来的文章就不再强调介绍界面了,而是针对具体的常见功能而展开。
本文介绍MediaPlayer的使用。MediaPlayer可以播放音频和视频,另外也可以通过VideoView来播放视频,虽然VideoView比MediaPlayer简单易用,但定制性不如用MediaPlayer,要视情况选择了。MediaPlayer播放音频比较简单,但是要播放视频就需要SurfaceView。SurfaceView比普通的自定义View更有绘图上的优势,它支持完全的OpenGL ES库。
先贴出本文程序运行结果的截图,上面是播放/停止音频,可用SeekBar来调进度,下面是播放/停止视频,也是用SeekBar来调进度:
main.xml的源码:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout android:id="@+id/LinearLayout01"
- android:layout_width="fill_parent" android:layout_height="fill_parent"
- xmlns:android="http://schemas.android.com/apk/res/android"
- 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入门:ContentProvider
2012-07-02 00:06 1978一、ContentProvider介绍 Cont ... -
Android入门:监听ContentProvider数据改变
2012-07-02 00:06 1439一、监听ContentProvider主要步骤 1 ... -
android 使用广播接收者监听短信和拦截外拨电话
2012-06-27 23:31 2217如果你想监听自己或者别人接收到的短信,设置黑名单等功能, ... -
android 广播接收者--BroadcastReceiver
2012-06-27 23:30 3568BroadcastReceiver初识: ... -
一个项目只使用一个Activity初探
2012-06-27 23:29 995提供一个简单案例: 1,新建一个项目 修改和添加 ... -
android 之访问WebService显示手机号码归属地
2012-06-27 23:27 1486发送XML 通过URL封装路径打开一个HttpURLC ... -
Android开发从入门到精通(8) _9
2012-04-24 21:45 2479Spinner 第八章(9) 在本节中将为Spinne ... -
Android开发从入门到精通(8) _8
2012-04-24 21:44 994RadioGroup 第八章(8) 在本章中将为Rad ... -
Android开发从入门到精通(8) _7
2012-04-24 21:43 985EditText 第八章(7) 在本节中,和上一节很类 ... -
Android开发从入门到精通(8) _6
2012-04-24 21:43 870CheckBox 第八章(6) 在本节中,将为Chec ... -
Android开发从入门到精通(8) _5
2012-04-24 21:42 904按钮 第八章(5) 看看下面的代码。这段代码代表了四个 ... -
Android开发从入门到精通(8) _4
2012-04-23 22:18 1085为AutoComplete创建一个 ... -
Android开发从入门到精通(8) _3
2012-04-23 22:17 1208使用菜单 第八章(3) 在本节中,你将建造一个应用 ... -
Android开发从入门到精通(8) _2
2012-04-23 22:17 1115修改AndroidManifest.xml文件 第八章( ... -
Android开发从入门到精通(8) _1
2012-04-23 22:16 910列表,菜单和其它Views 第八章(1) 关键技能 & ... -
Android开发从入门到精通(7) _8
2012-04-23 22:16 1113试试这个:修改AndoridPhoneDialer项目 ... -
Android开发从入门到精通(7) _7
2012-04-22 15:14 1011执行一个EditText View 第七章(7) ... -
Android开发从入门到精通(7) _6
2012-04-22 15:13 1153修改AndroidPhoneDialer 第七章(6) ... -
Android开发从入门到精通(7) _5
2012-04-22 15:13 929编辑活动许可 第七章(5) 大多数的Activit ... -
Android开发从入门到精通(7) _4
2012-04-22 15:12 1023在本节中你将会 ...
相关推荐
在Android应用开发中,多媒体播放是一个常见的需求,而`MediaPlayer`类就是处理音频和视频播放的核心组件。本篇文章将深入探讨如何使用`MediaPlayer`来实现音频和视频的播放,并结合`SurfaceView`进行详细讲解。 ...
#### Android提高第一篇之MediaPlayer MediaPlayer在Android开发中扮演着至关重要的角色,它不仅能够播放音频,还能处理视频播放任务。对于初学者而言,掌握MediaPlayer的基本操作是提升Android开发技能的重要一环...
在Android开发中,`MediaPlayer`类是用于播放各种媒体文件的核心组件。它可以处理音频、视频流,支持多种格式,如MP3、AAC、MPEG-4等。在本教程中,我们将深入探讨如何使用`MediaPlayer`播放网络URL、Asset目录下的...
在Android开发中,MediaPlayer是一个非常重要的组件,它用于播放各种媒体资源,如音频和视频文件。这个组件在处理多媒体内容时提供了丰富的功能,但同时也伴随着一些常见问题和挑战。这篇博客"Android MediaPlayer...
初始化MediaPlayer对象是使用它的第一步。通常,我们需要通过`new MediaPlayer()`创建一个实例,然后调用`setDataSource()`来设置要播放的媒体文件路径。例如: ```java MediaPlayer mediaPlayer = new MediaPlayer...
首先,创建`MediaPlayer`对象是使用它的第一步。通常,我们通过调用`MediaPlayer.create()`静态方法来初始化,传入上下文`Context`和媒体资源的URI。例如: ```java MediaPlayer mediaPlayer = MediaPlayer.create...
Android提供了多种API来处理音频、视频和图像,其中之一就是`MediaPlayer`类。这个强大的工具允许开发者播放本地或网络上的媒体文件,为用户创建各种多媒体应用提供了便利。 `MediaPlayer`是Android SDK中的核心...
本篇将深入探讨如何使用`TextureView`结合`MediaPlayer`来实现在Android应用中播放本地视频。`TextureView`提供了一个高效且灵活的方式显示图像数据,而`MediaPlayer`是Android系统提供的多媒体播放器,支持多种格式...
第一部分 MediaPlayer 概述 MediaPlayer 在 Android 系统中扮演着非常重要的角色,它包含了音频和视频的播放功能。在 Android 的界面上,Music 和 Video 两个应用程序都是调用 MediaPlayer 实现的。 MediaPlayer 在...
首先,创建`MediaPlayer`对象是播放视频的第一步。你可以通过`MediaPlayer.create()`方法来初始化,传入上下文(Context)和视频资源的URI。例如: ```java MediaPlayer mediaPlayer = MediaPlayer.create(this, R....
`MediaPlayer` 是Android系统提供的一个用于播放音频和视频的类。它支持多种音频和视频格式,包括MP3、AAC、WAV等音频格式,以及MP4、3GP等视频格式。在使用 `MediaPlayer` 时,首先需要初始化并设置数据源,然后...
1. **初始化MediaPlayer**:创建`MediaPlayer`对象,然后调用`setDataSource()`方法,传入RTSP地址。例如: ```java MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource("rtsp://your....
当一个视频播放完毕后,可以通过`mediaPlayer.pause()`、`mediaPlayer.reset()`来停止并重置`MediaPlayer`,然后加载下一个视频,同时更新`ImageView`的`Bitmap`为新视频的第一帧。整个过程在主线程之外执行,以避免...
- `MediaPlayer`类:这是Android系统提供的一个核心组件,用于播放音频文件。在demo中,它可能被用来加载和控制音源的播放。 - `AudioTrack`类:对于更底层的音频处理,开发者可能也会使用`AudioTrack`来播放...
创建`MediaPlayer`对象通常是第一步: ```java MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.video_file); ``` 接着,播放视频: ```java mediaPlayer.start(); ``` 暂停时: ```java ...
在Android开发中,`MediaPlayer` 是一个非常重要的组件,它用于播放各种音频和视频文件。本文将深入探讨`MediaPlayer`的使用,特别是如何利用它来播放音频文件。 首先,我们来了解一下`MediaPlayer`的基本概念。`...
在Android开发中,MediaPlayer是一个非常重要的组件,它用于播放各种媒体资源,如音频和视频文件。在这个名为"MeidaPlayer播放视频音量调整Demo"的项目中,我们将深入探讨如何利用MediaPlayer来播放视频并实现音量的...
在Android平台上,`MediaPlayer`类是系统提供的一个核心组件,用于播放各种音频和视频资源。这个类的强大之处在于它的灵活性,能够处理多种媒体格式,并且提供了丰富的控制接口,使得开发者可以方便地集成到自己的...
这时,我们可以利用Android提供的其他组件和API,如VideoView(它集成了SurfaceView和MediaPlayer),或者是更强大的第三方库,例如HZExoPlayer。HZExoPlayer是一个流行的Android视频播放库,它基于ExoPlayer,提供...