介绍:
你可以想像一下在cell phoneh一种流行的方式上去加载音乐.它将借助可移动的存储方介质,如SD card.在第1部分media play教程里,我们将创建一个简单的media player,它将允许用户从SD card里面去选择一首歌曲同时还可以进行播放.
Layout:
此项目由一个Activity,一个ListActivity组成。因此,对于ListActivity我们需要一个ListView来适用于这个实际的list,同时另一个View将被用于这个list每一项.对于这个例子我们将用一个TextView去显示每一个文件的名字。
首先,这里看到的是我们的ListView(songlist.xml): 复制内容到剪贴板
代码:
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android=http://schemas.android.com/apk/res/android
androidrientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ListView id="@id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:drawSelectorOnTop="false"/>
<TextView id="@id/android:empty"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="No songs found on SD Card."/>
</LinearLayout>
非常标准的ListView。当ListView里面没有条目时在这个布局里面用这个来表示:"@id/android:empty".这个TextView 条目将显示,同时在TextView里每一个这里都要被用于(song_item.xml):复制内容到剪贴板
代码:
<?xml version="1.0" encoding="utf-8"?>
<TextView id="@+id/text1"xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>你也许会想,为什么屏幕截图上显示的是一个黑色的ListView,layout上面没有提起任何颜色的设置?很好,这就是在AndroidManifest.xml文件里面定制的”theme(主题)”。在”应用程序”原素你能够定义这样的主题,增加:"android:theme="@android:style/Theme.Dark""。
ListActivity:
我们现在开始工作我们的ListActivity,我们将调用MusicDroid.这里是这个类和onCreate()功能的声明: 复制内容到剪贴板
代码:
public class MusicDroid extends ListActivity {
private static final String MEDIA_PATH = new String("/sdcard/");
private List<String> songs = new ArrayList<String>();
private MediaPlayer mp = new MediaPlayer();
private int currentPosition = 0;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.songlist);
updateSongList();
}
首先我们将设置一个私有成员变量用被用于这个Activity。第一个是MEDIA_PATH,同时我们设置它为”/sdcard”因为这是SD card位置。接下来有一个String类型的list它将包含这每一首歌曲的名字在list里.同时我们当然还需要一个MediaPlayher对象.我们称为mp.最后一个就是我们向上时,需要确定位置currentPosition,我们将用于存放当前正在播放的这首歌曲的索引.
onCreate()功能是相当基础的,我们设置我们的View让它成为这个songlist view我们在这之上进行创建同时调用这个updateSonglist()功能,这里就是这个功能的内容: 复制内容到剪贴板
代码:
public void updateSongList() {
File home = new File(MEDIA_PATH);
if (home.listFiles(new Mp3Filter()).length > 0) {
for (File file : home.listFiles(new Mp3Filter())) {
songs.add(file.getName());
}
ArrayAdapter<String> songList = new ArrayAdapter<String>(this,
R.layout.song_item, songs);
setListAdapter(songList);
}
}
这里我们创建一个File对象并称为”home”指向”/sdcard”.我们在home.ListFiles()里对这些文件中进行循环并返回.增加每一个文件到我们的List对象(songs)里.一旦我们这个list装满了我们就创建一个ArrayAdapter进入这个songs list同时设置它到我们的ListActivity的ListAdapter(如:setListAdapter(songList);).这样就落户在我们的 ListView.
你也许留意到这个对象”Mp3Filter”.这是一个对象它实现FilenameFiter(文件名过滤).这个对象被用于过滤,文件通过它以后返回, 实现了这个accept(File,String)功能, 也就完成了.
这里的这个对象我们能用于过滤,因此listFiles()仅仅返回的是Mp3的文件: 复制内容到剪贴板
代码:
class Mp3Filter implements FilenameFilter {
public boolean accept(File dir, String name) {
return (name.endsWith(".mp3"));
}
}
现在我们应该能够去创建一个在/sdcard路径下所有mp3的list了.因此现在我们需要能够选择一首歌曲并且进行播放.第一件事首先,让我们重载onListItemClick()方法因此当一首歌曲被点击时将通知我们: 复制内容到剪贴板
代码:
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
currentPosition = position;
playSong(MEDIA_PATH + songs.get(position));
}
相当基础的功能在这里.我们设置currentPosition,它里面包含了这个选中位置的索引这样点击的同时我们通过路径找到此歌曲并进行播放,因此我们去看看在playSong(String)里面到底发生了什么:
复制内容到剪贴板
代码:
private void playSong(String songPath) {
try {
mp.reset();
mp.setDataSource(songPath);
mp.prepare();
mp.start();
// Setup listener so next song starts automatically
mp.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer arg0) {
nextSong();
}
});
} catch (IOException e) {
Log.v(getString(R.string.app_name), e.getMessage());
}
}
对于我们这里这个MediaPlayer对象使一些事情真的容易了许多.首先我们调用mp.reset(),这样做将重置MediaPlayer到它的正常的状态.这是必须的如果我们正在放一首歌曲同时又想去改变这个数据源.这个reset()功能将也停止任何正在播放的歌曲.因此如果一首歌曲是播放状态同时我们又要选择另一首歌曲那么它将在启动下一首歌曲之前停止这首正在播放的歌曲.
我们然后通过路径找到这首歌曲(mp.setDataSource(String))同时调用prepare()和start().在这里指向MediaPlayer将启动播放你的歌曲.
接下来的工作就是去装备一个OnCompletionListener (mp.setOnCompletionListener(new OnCompletionListener()启动).在歌曲结束的时候,onCompletion(MediaPlayer) 这个功能将被调用.所有的我们做的这些都是从我们的Activity中调用nextSong()功能.这里是nextSong(): 复制内容到剪贴板
代码:
private void nextSong() {
if (++currentPosition >= songs.size()) {
// Last song, just reset currentPosition
currentPosition = 0;
} else {
// Play next song
playSong(MEDIA_PATH + songs.get(currentPosition));
}
}
分享到:
相关推荐
在Android开发中,MediaPlayer是处理音频和视频播放的核心类之一,它提供了丰富的API来控制多媒体文件的播放。本文将深入探讨如何使用MediaPlayer自定义循环播放的次数,这在需要重复播放特定音频片段的应用场景中...
在Android开发中,`MediaPlayer`类是用于播放各种媒体文件的核心组件。它可以处理音频、视频流,支持多种格式,如MP3、AAC、MPEG-4等。在本教程中,我们将深入探讨如何使用`MediaPlayer`播放网络URL、Asset目录下的...
"Android MediaPlayer播放mp3的实例" Android 中的 MediaPlayer 是一个功能强大且复杂的媒体播放器,可以播放音频和视频文件。在 Android 的界面上,Music 和 Video 两个应用程序都是调用 MediaPlayer 实现的。...
`MediaPlayer`是Android SDK提供的一种核心组件,专门用于播放音频和视频文件。在这个场景中,我们将详细探讨如何使用`MediaPlayer`来播放视频,同时结合`SurfaceView`来显示视频画面。本文将深入解析相关知识点,并...
总的来说,"玩转 Android MediaPlayer之视频预加载(优化)"是关于如何在Android平台上利用MediaPlayer组件,结合网络条件、硬件能力、错误处理等多个方面,实现视频的高效预加载,提升播放体验的技术探讨。...
在Android开发中,多媒体播放是常见的功能之一,`MediaPlayer` 和 `SurfaceView` 的结合使用是实现视频播放的标准方式。本篇文章将详细讲解如何利用这两个组件来构建一个视频播放器。 首先,`MediaPlayer` 是...
在Android平台上,`MediaPlayer`是系统提供的一个核心组件,用于播放各种媒体文件,如音频和视频。本篇文章将深入探讨`MediaPlayer`的使用方法,帮助开发者理解和掌握如何在Android应用中实现多媒体播放功能。 首先...
在Android应用开发中,MediaPlayer类是用于播放各种音频和视频资源的核心组件。在这个特定的示例中,我们关注的是如何使用MediaPlayer与进度条(SeekBar)结合,创建一个简单的音频播放器。以下是对这个Android应用...
在Android开发中,MediaPlayer是一个非常重要的组件,它用于播放音频和视频文件。在这个"Android实例之MediaPlayer播放音乐和视频"中,我们将深入探讨如何利用MediaPlayer类实现多媒体的播放功能。 首先,...
在Android开发中,MediaPlayer是一个非常重要的组件,它用于播放各种媒体资源,如音频和视频文件。这个组件在处理多媒体内容时提供了丰富的功能,但同时也伴随着一些常见问题和挑战。这篇博客"Android MediaPlayer...
在Android开发中,MediaPlayer是一个非常重要的组件,它用于播放各种媒体资源,如音频和视频文件。本教程将深入探讨如何使用Android的MediaPlayer类来播放MP3格式的音频文件。了解这个知识点对于Android开发者来说至...
**Android MediaPlayer 深度解析** 在Android平台上,多媒体处理是一个重要的功能,而`MediaPlayer`类是Android SDK提供的一种核心组件,专门用于处理音频和视频的播放。它提供了丰富的功能,如播放本地或网络资源...
Android提供了内置的`MediaPlayer`类,用于处理音频、视频的播放任务。本示例源代码着重解析`MediaPlayer`在Android系统中的实现,帮助开发者深入理解其工作原理和使用方法。 `MediaPlayer`类是Android SDK中的核心...
在Android平台上,`MediaPlayer`是系统提供的一个核心组件,用于播放音频和视频文件。这个组件支持多种媒体格式,包括MP3。在这个示例中,我们将深入探讨如何使用`MediaPlayer`来播放MP3文件。 首先,我们需要了解`...
在Android开发中,`MediaPlayer`是用于播放多媒体文件的核心组件,它可以处理音频、视频等多种格式的媒体资源。然而,有时我们需要处理特殊的网络环境或者需要实现特定的功能,例如播放反盗链的媒体文件或实现边播放...
在Android平台上,开发一个简单的音乐播放器应用是一个常见的任务,主要涉及到的核心组件是`MediaPlayer`。这个组件提供了音频和视频播放的功能,对于构建一个基础的音乐播放器来说,至关重要。以下将详细介绍`...
Android提供了多种API来处理音频、视频和图像,其中之一就是`MediaPlayer`类。这个强大的工具允许开发者播放本地或网络上的媒体文件,为用户创建各种多媒体应用提供了便利。 `MediaPlayer`是Android SDK中的核心...
在Android开发中,`MediaPlayer`是一个非常重要的组件,主要用于处理音频和视频的播放。这个"android mediaPlayer demo"是一个基础的示例,展示了如何在Android应用中集成和使用`MediaPlayer`类。下面我们将深入探讨...
在Android平台上,`MediaPlayer`是系统提供的一个核心组件,用于播放各种媒体文件,如音频和视频。本篇文章将深入探讨`MediaPlayer`的高级用法,包括但不限于事件处理、流媒体播放、音量控制以及错误处理等方面。...
### Android的MediaPlayer架构详细介绍 #### 一、MediaPlayer概述 Android平台上的`MediaPlayer`是一个非常重要的组件,用于处理音频和视频的播放任务。无论是系统自带的音乐播放器还是视频播放器应用,都依赖于`...