简介
在ubuntu 11, Android2.2, Eclipse 3.6下展示一个媒体播放功能及其遇到的问题探讨
将媒体文件push到sdcard目录
启动模拟器后,在DDMS透视图中,选择File Explorer,选择/mnt/sdcard目录,点击视图工具栏的+,将选择的文件push进去。
注:如果push失败,提示Read-Only File System,请将sdcard目录授以读+写权限,命令为
$ adb shell mount -o remount rw /
使用ls -l查看指定目录下的文件及文件夹详细信息,权限信息在第一列。如
$ adb shell
# ls -l /mnt/sdcard
注:在File Explorer中,已经列出了各文件夹和文件的权限。如果sdcard没有读写权限,请先授权。
使用VideoView渲染媒体
为什么要用VideoView?VideoView使用起来简单,而且封装了播放器,如播放错误,android会给出警告提示 ,不需要用户编程处理这些异常。代码如下:
viedoView.setVideoPath(filePath);//filePath = “/sdcard/test.mp3”;
videoView.start();
简单是简单,但不幸的是,如果媒体源没问题,但播放异常的话,定位就复杂一些了。
注:启动后,系统提示”对不起,该视频无法播放“,在LogCat中看到MediaPlayer和VideoView都指打印了一条error(1, -2147483648)的LOG。
导致此错误的典型原因有:
1,文件路径不对,如目录错误,不存在的URL及URI
2,媒体文件错误,或不支持的格式
3,缺少权限
经过debug,发现问题出在VideoView#openVidio的mMediaPlayer.prepareAsync();处。
prepare失败了,prepare的方法有两个,还有一个是prepare(),官网给的说明,它位的不同之处是,前者是异步执行。但个人认为,应该还有一个不同之处,前者不会抛出异常。
使用MediaPlayer
使用MediaPlayer也很简单。如下代码所示:
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(this,uri);
mp.prepare();// 使用mp.prepareAsync(),不会抛出异常,但有错误LOG,为error(38,0);
mp.start();
注:对上面那个无法播放的问题,可以在prepare()处捕获到IO异常:
java.io.IOException: Prepare failed.: status=0x1
对于此异常,有网友说模拟器对mp3支持不好,建议将mp3换成ogg格式再试。也有的说,使用类似以下方法
// FileInputStream fis = new FileInputStream(file);
// mp.setDataSource(fis.getFD());
前者我没有试过,如果有度过的,请告诉我结果。我使用的是后者,发现在创建输入流时,抛出了FileNotFoundException:file not exists(permission denied),关键在permission denied这句,应该是缺少权限,但媒体文件是有权限的,sdcard目录没有,于是给sdcard目录授以最大权限。
$ adb shell
# chmod 777 /mnt/sdcard
讨论
讨论1:在准备工作中,已经使用
$ adb shell mount -o remount rw /
或
$ adb shell mount -o remount 777 /
给目录授权过了,但为何sdcard目录还是无权限?
讨论2:Android对网络播放是否存在bug,对于本地可以正常播放的3gp,mp4等视频,放到服务器中使用http get方式进行网络播放,却只有少数片源可以播放,大多数在prepare()时就抛出了异常。
分享到:
相关推荐
这个是我在华为进行培训自己写的ppt,欢迎下载.
《Android开发常用技术初探》 在移动互联网的飞速发展中,Android系统占据了智能手机市场的主要份额,成为开发者和用户关注的焦点。Android以其开源、灵活的特性吸引了众多开发者,不断推动着应用程序的创新和发展...
《Android手机开发》教学内容初探,主要探讨的是在高等教育中如何有效开展Android应用程序的开发教育,以提升学生的综合能力和适应市场的需求。Android系统已经广泛应用于互联网程序和智能手机,因此,学习Android...
6.1 Android数据存储初探 6.2 数据存储之Shared Preferences 6.3 数据存储之Files 6.4 数据存储之Network 6.5 Android数据库编程 6.5.1 SQLite简介 6.5.2 SQLite编程详解 6.5.3 SQLiteOpenHelper应用 6.6 数据共享...
6.1 Android数据存储初探 6.2 数据存储之Shared Preferences 6.3 数据存储之Files 6.4 数据存储之Network 6.5 Android数据库编程 6.5.1 SQLite简介 6.5.2 SQLite编程详解 6.5.3 SQLiteOpenHelper应用 6.6 数据共享...
在进入Android应用软件开发的世界之前,首先需要理解的是,Android是一种开源的操作系统,主要应用于移动设备,如智能手机和平板电脑。它的开源特性使得开发者能够自由地定制和扩展系统的功能,这也是Android平台...
6.1 Android数据存储初探 6.2 数据存储之Shared Preferences 6.3 数据存储之Files 6.4 数据存储之Network 6.5 Android数据库编程 6.5.1 SQLite简介 6.5.2 SQLite编程详解 6.5.3 SQLiteOpenHelper...
6.1 Android数据存储初探 6.2 数据存储之Shared Preferences 6.3 数据存储之Files 6.4 数据存储之Network 6.5 Android数据库编程 6.5.1 SQLite简介 6.5.2 SQLite编程详解 6.5.3 SQLiteOpenHelper...
《Android 13 开发详解:初探与实践》 Android 13 是谷歌推出的最新一代移动操作系统,针对开发者和用户都带来了诸多改进和优化。本文将深入探讨 Android 13 的关键特性,帮助开发者更好地理解和利用这个平台,提升...
6.1 Android数据存储初探 6.2 数据存储之Shared Preferences 6.3 数据存储之Files 6.4 数据存储之Network 6.5 Android数据库编程 6.5.1 SQLite简介 6.5.2 SQLite编程详解 6.5.3 SQLiteOpenHelper应用 6.6 数据共享...
**6.1 Android数据存储初探** - **6.2 数据存储之SharedPreferences**: SharedPreferences是一种轻量级的数据存储方式,适用于保存简单的键值对数据。 - **6.3 数据存储之Files**: 文件存储是最常见的数据存储方式...
### Android应用开发初探——基于S3C6410平台 #### 一、引言 随着移动互联网的快速发展,Android作为最受欢迎的操作系统之一,在全球范围内拥有庞大的用户基础。对于开发者而言,掌握Android应用程序开发的基本原理...
9.86、ANDROID自动化测试初探 324 9.86.1、捕获Activity上的Element 324 9.86.2、Hierarchyviewer 捕获Element的 328 9.86.3、架构实现 330 9.86.4、模拟键盘鼠标事件(Socket+Instrumentation实现) 332 9.86.5、再...
- **项目初探**:深入分析项目的组成部分,如源代码、资源文件和布局文件。 - **Eclipse入门**:提供关于如何使用Eclipse进行Android开发的基本技巧。 #### 活动(Activity) - **重写第一个项目**:展示如何重构...
《MusicPlayerLite:初探Android编程的里程碑》 在2010年,移动设备的浪潮正在席卷全球,其中Android操作系统崭露头角,成为开发者的新宠。在这个背景下,一个名为"MusicPlayerLite"的项目诞生了,它代表了开发者...
同时,利用体育课程教学管理软件和学生信息查询软件(如J2EE语言编译的Windows系统管理软件或Android App),可以促进师生之间的信息交流,增强教学的灵活性和安全性。 软件应用层面,数字化课件和多媒体教学设备有...