- 浏览: 134642 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
zfcejb:
你好,这X-gen有源码参考吗
X-gen PPT下载——《研磨设计模式》 实战 -
1927105:
LZ研究过Hibernate4里的监听时间吗?我这边用4.3. ...
Hibernate4实战 之第六部分:基本实现原理 -
hbbbs:
看介绍 挺美的!
X-gen PPT下载——《研磨设计模式》 实战 -
jenmhdn:
即这个是综合运用设计模式的
X-gen PPT下载——《研磨设计模式》 实战 -
jenmhdn:
很值得一看
X-gen PPT下载——《研磨设计模式》 实战
简介
Android的多媒体框架,在2.3之前是采用的Open Core,在2.3之后采用的是Stagefright。不管框架的内部实现如何变化,对外提供的API都是一样的。
Android的多媒体框架提供了对大多数主流多媒体格式的支持,使得我们能够很方便的进行音频、视频和图片的操作。最主要的就是使用MediaPlayer接口。
MediaPlayer接口的常见功能
1:create :创建一个MediaPlayer对象
2:setDataSource :设置要播放的资源
3:start() :开始播放
4:pause() :暂停播放
5:prepare() :准备要播放的内容,同步的
6:release() :释放播放器对象
7:reset() :重置播放的资源
8:seekTo(int site) :跳转到开始播放的位置
9:stop() :停止播放
使用MediaPlayer
MediaPlayer既能播放音频,也能播放视频,是我们要主要学习的内容。它能支持如下的多媒体资源:
1:Local资源
2:内部的URI,比如从其他的ContentProvider中获取的媒体资源
3:外部的URI,可能是通过流式获取的媒体资源
MediaPlayer访问本地多媒体资源
所谓本地资源,多是放置在res/raw/下面的多媒体文件。示例代码如下:
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);
mediaPlayer.start();
不需要调用prepare()了,create()方法已经帮我们完成这个功能了
MediaPlayer访问内部的URI
这通常都是从其他的内容提供者那里去获取,一般都采用流来处理,示例代码如下:
MediaPlayer访问远程多媒体资源,多是通过流式来处理,示例代码如下:
释放MediaPlayer,示例代码如下:
如果要播放视频,方式也差不多,只不过需要添加用来显示视频的Widget,常用的是SurfaceView,它的功能较强,可以实现很多定制功能。当然也可以使用VideoView,它使用简单,但定制功能不强。
这里有一个简单的播放视频的示例,布局文件的示例代码如下:
java代码:
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
- <SurfaceView
- android:id="@+id/surface"
- android:layout_width="fill_parent"
- android:layout_height="200dp" />
- <Button
- android:id="@+id/start"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="播放" />
- <Button
- android:id="@+id/stop"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="停止" />
- </LinearLayout>
程序里面的示例代码如下:
java代码:
- public class MtActivity extends Activity {
- private MediaPlayer mMediaPlayer;
- private SurfaceView mPreview;
- private SurfaceHolder holder;
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- mPreview = (SurfaceView) findViewById(R.id.surface);
- holder = mPreview.getHolder();
- holder.setFixedSize(100,100);
- holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
- Button start = (Button)this.findViewById(R.id.start);
- Button stop = (Button)this.findViewById(R.id.stop);
java代码:
- start.setOnClickListener(new OnClickListener(){
- @Override
- public void onClick(View v) {
- mMediaPlayer = MediaPlayer.create(MtActivity.this, R.raw.t1);
- mMediaPlayer.setDisplay(holder);
- // mMediaPlayer.prepare();
- mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
- mMediaPlayer.start();
- }
- });
- stop.setOnClickListener(new OnClickListener(){
- @Override
- public void onClick(View v) {
- mMediaPlayer.stop();
- }
- });
- }
- }
- 视频文件,尽量选用3gp或mp4的格式
异步preparation
使用MediaPlayer,在调用prepare()方法的时候,该方法可能会执行较长的时间,比如它需要对媒体文件进行解码,这意味着它不应该运行在UI Thread里面,否则会阻塞UI线程。
解决方案是:使用另外的线程来准备媒体资源,准备好后通知主线程。
这个模式在Android的多媒体框架里面已经得到支持,你可以调用prepareAsync()方法,这个方法会在后台进行资源的准备,并在准备好后通知监听器:MediaPlayer.OnPreparedListener,然后执行onPrepared()方法即可。
在Service里面异步使用MediaPlayer
使用MdeiaPlayer来播放音乐,通常都是在Service中使用,为了不阻塞UI线程,通常会异步的使用,示例代码如下:
java代码:
- public class MyService extends Service implements MediaPlayer.OnPreparedListener {
- MediaPlayer mMediaPlayer = null;
- public int onStartCommand(Intent intent, int flags, int startId) {
- mMediaPlayer = new MediaPlayer();
- mMediaPlayer.setDataSource(getApplicationContext(), myUri);
- mMediaPlayer.setOnPreparedListener(this);
- mMediaPlayer.prepareAsync();
- }
- public void onPrepared(MediaPlayer player) {
- player.start();
- }
- }
处理异步使用MediaPlayer的错误
异步使用MdeiaPlayer的时候,对于可能出现的错误,可以通过实现MediaPlayer.OnErrorListener,来监听并处理,示例代码如下:
java代码:
- public class MyService extends Service implements MediaPlayer.OnPreparedListener , MediaPlayer.OnErrorListener {
- MediaPlayer mMediaPlayer = null;
- public int onStartCommand(Intent intent, int flags, int startId) {
- //………
- mMediaPlayer.setOnErrorListener(this);
- }
- public void onPrepared(MediaPlayer player) {
- player.start();
- }
- public boolean onError(MediaPlayer mp, int what, int extra) {
- //在这里处理错误
- }
- }
使用wake lock
当使用MdeiaPlayer在后台播放音乐的时候,用户可能会关闭或锁定手机,以节约电量,此时所有的应用都会强制sleep。
为了当手机重新开启或解除锁定的时候,播放音乐的后台服务能继续运行,你需要设置wake lock的模式。
基本的设置方式很简单,就一句话,示例代码如下:
还需要添加权限如下:
但要注意一定,如果你的service还需要其他服务的支持,比如需要通过蓝牙去获取数据,那么,在wake你的service的时候,还需要wake这些相应的服务。
在foreground Service中使用MediaPlayer
使用MdeiaPlayer来播放音乐,也经常需要在前端界面上,同步显示一些信息,比如:歌曲名称等,这就需要实现foreground service,示例代码如下:
java代码:
- String songName;
- PendingIntent pi = PendingIntent.getActivity(getApplicationContext(), 0,
- new Intent(getApplicationContext(), MainActivity.class),
- PendingIntent.FLAG_UPDATE_CURRENT);
- Notification notification = new Notification();
- notification.tickerText = text;
- notification.icon = R.drawable.play0;
- notification.flags |= Notification.FLAG_ONGOING_EVENT;
- notification.setLatestEventInfo(getApplicationContext(), "MusicPlayerSample","Playing: " + songName, pi);
- startForeground(NOTIFICATION_ID, notification);
视频配套PPT,视频地址【Android4开发入门经典独家视频课程】
发表评论
-
Android4开发入门经典 之 第十二部分:最佳实践
2012-07-24 18:48 1244性能提升 有两个 ... -
Android4开发入门经典 之 第十二部分:最佳实践
2012-07-24 08:40 122性能提升 有两个编写有效代码的基本规则: 1:不 ... -
Android4开发入门经典 之 第十一部分:网络编程
2012-07-21 08:23 1193基于Socket的网络编程 Android ... -
Hibernate4实战 之第五部分:Hibernate的事务和并发
2012-07-11 12:09 847Hibernate本身没有事务 ... -
Android4开发入门经典 之 第九部分:Content Provider【私塾在线原创】
2012-07-09 19:56 1119Content Provider基础知识 http ... -
Android4开发入门经典 之 第八部分:SQLite
2012-07-09 12:34 946SQLite基本知识 SQLite介绍 SQLi ... -
Android4开发入门经典 之 第七部分(2):数据存储
2012-07-08 08:45 1357数据存储基本知识 ... -
Android4开发入门经典 之 第七部分(1):数据存储
2012-07-08 08:44 1074数据存储基本知识 ... -
Android4开发入门经典 之 第六部分:Broadcast
2012-07-06 20:42 1028Broadcast基本概念 Broadcast是什 ... -
Android4开发入门经典 之 第五部分:Service
2012-07-05 12:42 957Service基本概念 Service是什么 是 ... -
Android4开发入门经典 之 第四部分:用户界面
2012-07-04 07:56 2645基本概念 常用Widgets和布局 常用 ... -
Android4开发入门经典 之 第三部分:Activity
2012-07-03 14:04 1542Activity基本概念 Activity是什 ... -
Android4开发入门经典 之 第二部分:Android应用的核心基础
2012-07-02 07:35 1879Android应用中的组件 Applicati ... -
跟我学Android4 之 第一部分:Android入门基础
2012-06-30 08:09 3207Android是什么 Android是一个针对移动 ...
相关推荐
“第十部分 多媒体”部分将介绍Android的多媒体框架,学习如何使用MediaPlayer对象来播放音乐和视频,结合SurfaceView来播放视频,异步准备多媒体资源,以及处理错误和使用wakelock。 “第十一部分 网络编程”涉及...
《Android 4游戏编程入门经典》这本书是为那些希望在Android平台上开发游戏的新手准备的全面指南。本书覆盖了从Android基础知识到游戏开发高级技巧的所有内容,并通过实际案例帮助读者掌握所需技能。 #### 二、章节...
在Android App开发领域,入门是每个开发者必经的阶段。这个"Android App开发入门范例程序"集合提供了多个章节的学习材料,旨在帮助新手快速掌握Android应用的基础开发技能。以下是各个章节和FlagAPI部分可能涉及的...
《Android开发入门经典》这本书是Android开发者初学者的宝贵资源,它涵盖了Android应用开发的基础知识,从环境搭建到实际项目开发,全方位地引导新手进入Android世界。以下将详细阐述书中的核心知识点: 1. **...
"Android 移动开发入门与进阶 源代码"是一个宝贵的资源,它涵盖了从基础到高级的Android应用开发知识。由张立国编著的这本书,通过源代码的形式,帮助读者深入理解Android应用的构建过程。 本书分为多个章节,从"ch...
《Android开发从入门到精通》是一本广受欢迎的Android编程指南,涵盖了从基础到进阶的各个层面。随书源码7-12章的压缩包包含的是书中第七至第十二章的实例代码,旨在帮助读者更好地理解和实践所学知识。下面我们将...
在《Android游戏开发入门》这本书中,作者Mario Zechner将引导读者通过十四章的内容深入理解Android平台上的游戏开发技术。本书不仅适合初学者,也适用于有一定编程基础但希望在Android平台上进行游戏开发的程序员。...
《Android开发入门与实战》是一本面向初学者的Android应用开发指南,旨在帮助读者快速掌握Android编程的基础知识和实战技能。这本书通常会涵盖以下几个核心知识点: 1. **Android开发环境搭建**:首先,你需要了解...
《Android开发从入门到精通》是一本针对初学者和进阶者的学习指南,旨在帮助读者掌握Android应用开发的核心技能。本书的练习项目源代码提供了丰富的实践案例,涵盖了Android开发的多个重要方面,如用户界面设计、...
4. **第10章:多媒体开发** - 播放音频和视频:MediaPlayer和VideoView组件的使用。 - 捕获媒体:Camera API和MediaRecorder进行拍照和录制视频。 - 图像处理:Bitmap和Canvas操作,以及使用 Glide 或 Picasso ...
在本资源中,我们聚焦于"Android开发从入门到精通(随书光盘)【源码】第14章",这显然是一份专为学习Android应用开发设计的教学材料。第14章通常涵盖特定的主题或技能,可能是进阶概念,也可能是对前面章节的深入...
[14本经典Android开发教程]-3-Android SDK 中文开发文档 什么是 Android? Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。Beta版的 Android SDK 提供了在Android 平台上...
### Android开发入门介绍 在移动互联网时代,Android作为全球最大的移动操作系统之一,其应用开发的重要性不言而喻。本文将围绕“Android开发入门介绍”这一主题展开,旨在为初学者提供一个全面的基础知识体系,...
Android开发入门教程从配置环境开始,是一套针对初学者精心设计的教程,旨在帮助零基础的学员快速掌握Android应用开发的基础知识。本教程分为十二个章节,内容涵盖全面,逐步引导学习者进入Android开发的世界。 第...
根据提供的文件信息,我们可以推断出这是一本关于Android开发的书籍——《Android开发从入门到精通》,作者为扶松柏。尽管具体内容链接无法直接访问,但基于标题、描述及部分可见信息,我们可以总结出一些重要的知识...
8. **第10章:定位与地图服务** - GPS与网络定位 - Google Maps API的使用 - 地图上的标记与路径绘制 9. **第11章:权限管理与安全** - Android 6.0以上的运行时权限管理 - 数据加密与安全编码实践 - 应用...
10. **Android Studio IDE**:作为Android开发的主要工具,Android Studio的使用技巧和调试方法也是学习的一部分。 通过这些例子,你可以逐步了解并掌握Android开发的全过程,从创建项目、编写代码、运行调试,到...