- 浏览: 747873 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
梦行Monxin商城系统:
java网上商城与php网上商城比较 -
梦行Monxin商城系统:
java网上商城与php网上商城比较 -
任楚娴:
你好,请问html = nvl(html); 这句中的nvl( ...
java html串转换成文本串 -
u013246812:
,谢拉!
jQuery ui Dialog 讲解参数 -
大宝剑99:
...
前端优化
最近使用MediaPlayer 实现播放 静态资源文件,即res目录下raw目录下的文件
实现连续播放:
mMediaPlayer = MediaPlayer.create(this, res);
// 播放完毕后,设置监听事件
mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// 播完一首之后进行下一首
mp.release();
nextMusic();
}
});
============================
MediaPlayer还有多种使用方式和方法,并不只局限于例子所介绍的一种。具体来看:
1)如何获得MediaPlayer实例:
可以使用直接new的方式:
MediaPlayer mp = new MediaPlayer();
也可以使用create的方式,如:
MediaPlayer mp = MediaPlayer.create(this, R.raw.test);//这时就不用调用setDataSource了
2) 如何设置要播放的文件:
MediaPlayer要播放的文件主要包括3个来源:
a. 用户在应用中事先自带的resource资源
例如:MediaPlayer.create(this, R.raw.test);
b. 存储在SD卡或其他文件路径下的媒体文件
例如:mp.setDataSource("/sdcard/test.mp3");
c. 网络上的媒体文件
例如:mp.setDataSource("http://www.citynorth.cn/music/confucius.mp3");
MediaPlayer的setDataSource一共四个方法:
setDataSource (String path)
setDataSource (FileDescriptor fd)
setDataSource (Context context, Uri uri)
setDataSource (FileDescriptor fd, long offset, long length)
3)对播放器的主要控制方法:
Android通过控制播放器的状态的方式来控制媒体文件的播放,其中:
prepare()和prepareAsync() 提供了同步和异步两种方式设置播放器进入prepare状态,需要注意的是,如果MediaPlayer实例是由create方法创建的,那么第一次启动播放前不需要再调用prepare()了,因为create方法里已经调用过了。
start()是真正启动文件播放的方法,
pause()和stop()比较简单,起到暂停和停止播放的作用,
seekTo()是定位方法,可以让播放器从指定的位置开始播放,需要注意的是该方法是个异步方法,也就是说该方法返回时并不意味着定位完成,尤其是播放的网络文件,真正定位完成时会触发OnSeekComplete.onSeekComplete(),如果需要是可以调用setOnSeekCompleteListener(OnSeekCompleteListener)设置监听器来处理的。
release()可以释放播放器占用的资源,一旦确定不再使用播放器时应当尽早调用它释放资源。
reset()可以使播放器从Error状态中恢复过来,重新会到Idle状态。
4)设置播放器的监听器:
MediaPlayer提供了一些设置不同监听器的方法来更好地对播放器的工作状态进行监听,以期及时处理各种情况,
如: setOnCompletionListener(MediaPlayer.OnCompletionListener listener)、
setOnErrorListener(MediaPlayer.OnErrorListener listener)等,设置播放器时需要考虑到播放器可能出现的情况设置好监听和处理逻辑,以保持播放器的健壮性
========================================
package com.android.music_player;
import java.util.ArrayList;
import java.util.List;
import android.app.ListActivity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ListView;
public class ActivityMain extends ListActivity {
// 定义 按钮
private ImageButton mFrontImageButton = null;
private ImageButton mStopImageButton = null;
private ImageButton mStartImageButton = null;
private ImageButton mPauseImageButton = null;
private ImageButton mNextImageButton = null;
// 声明MediaPlayer mMediaPlayer
private MediaPlayer mMediaPlayer = null;
// 播放列表
private List<Integer> mMusicList = new ArrayList<Integer>();
// 当前播放歌曲的索引
private int currentListItem = 0;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 更新显示播放列表
musicList();
// 构建MediaPlayer对象,以及ImageButton
mMediaPlayer = new MediaPlayer();
mFrontImageButton = (ImageButton) this
.findViewById(R.id.LastImageButton);
mStopImageButton = (ImageButton) this
.findViewById(R.id.stopImageButton);
mStartImageButton = (ImageButton) this
.findViewById(R.id.StartImageButton);
mPauseImageButton = (ImageButton) this
.findViewById(R.id.PauseImageButton);
mNextImageButton = (ImageButton) this
.findViewById(R.id.NextImageButton);
// 停止按钮
mStopImageButton.setOnClickListener(new ImageButton.OnClickListener() {
public void onClick(View v) {
// 判断是否正在播放
if (mMediaPlayer.isPlaying()) {
// 重置MediaPlayer到初始化状态
mMediaPlayer.reset();
}
}
});
// 开始按钮
mStartImageButton.setOnClickListener(new ImageButton.OnClickListener() {
public void onClick(View v) {
playMusic(mMusicList.get(currentListItem));
}
});
// 暂停
mPauseImageButton.setOnClickListener(new ImageButton.OnClickListener() {
public void onClick(View v) {
if (mMediaPlayer.isPlaying()) {
// 暂停
mMediaPlayer.pause();
} else {
// 开始播放
mMediaPlayer.start();
}
}
});
// 下一首
mNextImageButton.setOnClickListener(new ImageButton.OnClickListener() {
public void onClick(View v) {
nextMusic();
}
});
// 上一首
mFrontImageButton.setOnClickListener(new ImageButton.OnClickListener() {
public void onClick(View v) {
FrontMusic();
}
});
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
mMediaPlayer.stop();
mMediaPlayer.release();
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
// 录点击列表是,播放被点击的音乐
protected void onListItemClick(ListView l, View v, int position, long id) {
currentListItem = position;
playMusic(mMusicList.get(position));
}
// 播放列表
private void musicList() {
try {
// 取得指定位置的文件设置显示到播放列表
mMusicList.add(R.raw.rmb1);
mMusicList.add(R.raw.rmb2);
mMusicList.add(R.raw.rmb3);
mMusicList.add(R.raw.rmb4);
mMusicList.add(R.raw.rmb5);
mMusicList.add(R.raw.rmb6);
mMusicList.add(R.raw.rmb7);
mMusicList.add(R.raw.rmb8);
mMusicList.add(R.raw.rmb9);
mMusicList.add(R.raw.rmb0);
ArrayAdapter<Integer> musicList = new ArrayAdapter<Integer>(
this, R.layout.musicitme, mMusicList);
setListAdapter(musicList);
} catch (Exception ex) {
ex.printStackTrace();
}
}
// 播放音乐
private void playMusic(Integer res) {
try {
// 重置MediaPlayer
mMediaPlayer = MediaPlayer.create(this, res);
// 准备播放
//mMediaPlayer.prepare();
// 开始播放
mMediaPlayer.start();
// 播放完毕后,设置监听事件
mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// 播完一首之后进行下一首
mp.release();
nextMusic();
}
});
}catch (Exception e) {
e.printStackTrace();
}
}
// 下一首
private void nextMusic() {
if (++currentListItem >= mMusicList.size()) {
// currentListItem = 0;
// playMusic(mMusicList.get(currentListItem));// 从第一首歌开始播放
} else {
playMusic(mMusicList.get(currentListItem));
}
}
// 上一首
private void FrontMusic() {
if (--currentListItem > 0) {
playMusic(mMusicList.get(currentListItem));
} else {
// 如果当前currentListItem等于-1,则设置currentListItem=0
// if (currentListItem < 0) {
// currentListItem = 0;
// }
// playMusic(mMusicList.get(currentListItem));
}
}
}
-----------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageButton android:id="@+id/LastImageButton"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_x="10px" android:layout_y="70px" android:src="@drawable/last" />
<ImageButton android:id="@+id/stopImageButton"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_x="70px" android:layout_y="70px" android:src="@drawable/stop" />
<ImageButton android:id="@+id/StartImageButton"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_x="130px" android:layout_y="70px" android:src="@drawable/start" />
<ImageButton android:id="@+id/PauseImageButton"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_x="190px" android:layout_y="70px" android:src="@drawable/pause" />
<ImageButton android:id="@+id/NextImageButton"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_x="250px" android:layout_y="70px" android:src="@drawable/next" />
<ListView android:id="@id/android:list" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_weight="1"
android:drawSelectorOnTop="false" />
</AbsoluteLayout>
---------------------
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/TextView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
实现连续播放:
mMediaPlayer = MediaPlayer.create(this, res);
// 播放完毕后,设置监听事件
mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// 播完一首之后进行下一首
mp.release();
nextMusic();
}
});
============================
MediaPlayer还有多种使用方式和方法,并不只局限于例子所介绍的一种。具体来看:
1)如何获得MediaPlayer实例:
可以使用直接new的方式:
MediaPlayer mp = new MediaPlayer();
也可以使用create的方式,如:
MediaPlayer mp = MediaPlayer.create(this, R.raw.test);//这时就不用调用setDataSource了
2) 如何设置要播放的文件:
MediaPlayer要播放的文件主要包括3个来源:
a. 用户在应用中事先自带的resource资源
例如:MediaPlayer.create(this, R.raw.test);
b. 存储在SD卡或其他文件路径下的媒体文件
例如:mp.setDataSource("/sdcard/test.mp3");
c. 网络上的媒体文件
例如:mp.setDataSource("http://www.citynorth.cn/music/confucius.mp3");
MediaPlayer的setDataSource一共四个方法:
setDataSource (String path)
setDataSource (FileDescriptor fd)
setDataSource (Context context, Uri uri)
setDataSource (FileDescriptor fd, long offset, long length)
3)对播放器的主要控制方法:
Android通过控制播放器的状态的方式来控制媒体文件的播放,其中:
prepare()和prepareAsync() 提供了同步和异步两种方式设置播放器进入prepare状态,需要注意的是,如果MediaPlayer实例是由create方法创建的,那么第一次启动播放前不需要再调用prepare()了,因为create方法里已经调用过了。
start()是真正启动文件播放的方法,
pause()和stop()比较简单,起到暂停和停止播放的作用,
seekTo()是定位方法,可以让播放器从指定的位置开始播放,需要注意的是该方法是个异步方法,也就是说该方法返回时并不意味着定位完成,尤其是播放的网络文件,真正定位完成时会触发OnSeekComplete.onSeekComplete(),如果需要是可以调用setOnSeekCompleteListener(OnSeekCompleteListener)设置监听器来处理的。
release()可以释放播放器占用的资源,一旦确定不再使用播放器时应当尽早调用它释放资源。
reset()可以使播放器从Error状态中恢复过来,重新会到Idle状态。
4)设置播放器的监听器:
MediaPlayer提供了一些设置不同监听器的方法来更好地对播放器的工作状态进行监听,以期及时处理各种情况,
如: setOnCompletionListener(MediaPlayer.OnCompletionListener listener)、
setOnErrorListener(MediaPlayer.OnErrorListener listener)等,设置播放器时需要考虑到播放器可能出现的情况设置好监听和处理逻辑,以保持播放器的健壮性
========================================
package com.android.music_player;
import java.util.ArrayList;
import java.util.List;
import android.app.ListActivity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ListView;
public class ActivityMain extends ListActivity {
// 定义 按钮
private ImageButton mFrontImageButton = null;
private ImageButton mStopImageButton = null;
private ImageButton mStartImageButton = null;
private ImageButton mPauseImageButton = null;
private ImageButton mNextImageButton = null;
// 声明MediaPlayer mMediaPlayer
private MediaPlayer mMediaPlayer = null;
// 播放列表
private List<Integer> mMusicList = new ArrayList<Integer>();
// 当前播放歌曲的索引
private int currentListItem = 0;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 更新显示播放列表
musicList();
// 构建MediaPlayer对象,以及ImageButton
mMediaPlayer = new MediaPlayer();
mFrontImageButton = (ImageButton) this
.findViewById(R.id.LastImageButton);
mStopImageButton = (ImageButton) this
.findViewById(R.id.stopImageButton);
mStartImageButton = (ImageButton) this
.findViewById(R.id.StartImageButton);
mPauseImageButton = (ImageButton) this
.findViewById(R.id.PauseImageButton);
mNextImageButton = (ImageButton) this
.findViewById(R.id.NextImageButton);
// 停止按钮
mStopImageButton.setOnClickListener(new ImageButton.OnClickListener() {
public void onClick(View v) {
// 判断是否正在播放
if (mMediaPlayer.isPlaying()) {
// 重置MediaPlayer到初始化状态
mMediaPlayer.reset();
}
}
});
// 开始按钮
mStartImageButton.setOnClickListener(new ImageButton.OnClickListener() {
public void onClick(View v) {
playMusic(mMusicList.get(currentListItem));
}
});
// 暂停
mPauseImageButton.setOnClickListener(new ImageButton.OnClickListener() {
public void onClick(View v) {
if (mMediaPlayer.isPlaying()) {
// 暂停
mMediaPlayer.pause();
} else {
// 开始播放
mMediaPlayer.start();
}
}
});
// 下一首
mNextImageButton.setOnClickListener(new ImageButton.OnClickListener() {
public void onClick(View v) {
nextMusic();
}
});
// 上一首
mFrontImageButton.setOnClickListener(new ImageButton.OnClickListener() {
public void onClick(View v) {
FrontMusic();
}
});
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
mMediaPlayer.stop();
mMediaPlayer.release();
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
// 录点击列表是,播放被点击的音乐
protected void onListItemClick(ListView l, View v, int position, long id) {
currentListItem = position;
playMusic(mMusicList.get(position));
}
// 播放列表
private void musicList() {
try {
// 取得指定位置的文件设置显示到播放列表
mMusicList.add(R.raw.rmb1);
mMusicList.add(R.raw.rmb2);
mMusicList.add(R.raw.rmb3);
mMusicList.add(R.raw.rmb4);
mMusicList.add(R.raw.rmb5);
mMusicList.add(R.raw.rmb6);
mMusicList.add(R.raw.rmb7);
mMusicList.add(R.raw.rmb8);
mMusicList.add(R.raw.rmb9);
mMusicList.add(R.raw.rmb0);
ArrayAdapter<Integer> musicList = new ArrayAdapter<Integer>(
this, R.layout.musicitme, mMusicList);
setListAdapter(musicList);
} catch (Exception ex) {
ex.printStackTrace();
}
}
// 播放音乐
private void playMusic(Integer res) {
try {
// 重置MediaPlayer
mMediaPlayer = MediaPlayer.create(this, res);
// 准备播放
//mMediaPlayer.prepare();
// 开始播放
mMediaPlayer.start();
// 播放完毕后,设置监听事件
mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// 播完一首之后进行下一首
mp.release();
nextMusic();
}
});
}catch (Exception e) {
e.printStackTrace();
}
}
// 下一首
private void nextMusic() {
if (++currentListItem >= mMusicList.size()) {
// currentListItem = 0;
// playMusic(mMusicList.get(currentListItem));// 从第一首歌开始播放
} else {
playMusic(mMusicList.get(currentListItem));
}
}
// 上一首
private void FrontMusic() {
if (--currentListItem > 0) {
playMusic(mMusicList.get(currentListItem));
} else {
// 如果当前currentListItem等于-1,则设置currentListItem=0
// if (currentListItem < 0) {
// currentListItem = 0;
// }
// playMusic(mMusicList.get(currentListItem));
}
}
}
-----------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageButton android:id="@+id/LastImageButton"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_x="10px" android:layout_y="70px" android:src="@drawable/last" />
<ImageButton android:id="@+id/stopImageButton"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_x="70px" android:layout_y="70px" android:src="@drawable/stop" />
<ImageButton android:id="@+id/StartImageButton"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_x="130px" android:layout_y="70px" android:src="@drawable/start" />
<ImageButton android:id="@+id/PauseImageButton"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_x="190px" android:layout_y="70px" android:src="@drawable/pause" />
<ImageButton android:id="@+id/NextImageButton"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_x="250px" android:layout_y="70px" android:src="@drawable/next" />
<ListView android:id="@id/android:list" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_weight="1"
android:drawSelectorOnTop="false" />
</AbsoluteLayout>
---------------------
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/TextView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
发表评论
-
记录年会小系统
2018-02-04 14:42 1144有点意思,年会过后,抽奖活动saas小系统扒光看看:支持P ... -
proguard 代码混淆
2016-11-22 10:59 692url:http://proguard.sourceforg ... -
家娃---曾经的APP
2016-10-21 10:01 407家娃APP 简介:晒娃娃秀家庭,为娃娃成长护航! 介绍 ... -
端午收粽子啦,家庭社交还能这么玩
2015-06-19 09:05 854<!--StartFragment --> ... -
android string.xml 特殊符号
2014-12-29 19:57 1374常见的ASCII十进制交换编码:@ 对应 - ... -
android 调用系统 录像,录音等
2014-10-21 20:25 20331、调用系统拍照[mw_shl_code=java,true] ... -
转:解决模拟器安装 timeout的问题
2014-10-15 17:20 473Failed to install on devi ... -
给文章增加微信公号关注链接
2014-09-19 10:19 1281测试了一下: 方法1:【已失效】 <a hre ... -
切内内小应用
2014-09-15 14:41 791中午从网上看到你个android 切的源码,对其进行了改造 ... -
什么是互联网思维
2014-08-12 09:42 739什么是互联网思维?? 不同人以及从事这不同的行业会有 ... -
android当中大图片显示适应问题
2014-07-25 08:54 987在Android开发中比较头疼的是Android的分辨率问题, ... -
绿色2048
2014-05-11 17:52 966绿色2048 最近2048小游戏非常火。 做 ... -
百变周边秀
2014-04-07 16:22 536百变周边秀 http://mojianpo.host ... -
基于周边找IT精英
2014-03-13 11:28 747最近在整理“垂直app社交”的需求,针对周边定位服务,做了 ... -
android 组件属性描述
2014-03-12 14:31 2693属性名称 描述 androi ... -
春节前最后一个:马上群飞
2014-01-27 18:02 821整理网上的资源,进行加工而成。 其实这是一个很久以 ... -
2014春节铃声王
2014-01-20 13:46 955春节快来到,大街小巷真热闹,穿新衣,戴新帽,手机铃声凑 ... -
2014春节短信王
2014-01-20 08:26 796史上最全的2014马年春节拜年短信王为您集合各式春节拜年短 ... -
去掉Activity title bar 方法
2013-11-20 08:21 727第一个方法是在代码去掉title bar 在Activit ... -
发泄神器
2013-10-26 15:24 1102发泄神器 android版 一款娱乐发泄应用小软件, ...
相关推荐
"Android MediaPlayer播放mp3的实例" Android 中的 MediaPlayer 是一个功能强大且复杂的媒体播放器,可以播放音频和视频文件。在 Android 的界面上,Music 和 Video 两个应用程序都是调用 MediaPlayer 实现的。...
本实例主要讲解如何使用`MediaPlayer`播放存储在`res/raw`文件夹内的音乐文件。 1. **创建资源文件夹:** 首先,在项目的`res`目录下创建一个新的文件夹`raw`。这个文件夹专门用来存放资源文件,如音频、视频等。...
- 系统服务通信:Android通过Binder机制进行跨进程通信,`MediaPlayer`与MediaServer之间的通信就是典型例子。 - 媒体数据解码:了解不同格式的音频和视频如何被解码为原始数据,以及这些数据如何被发送到硬件进行...
在Android开发中,`...总的来说,`MediaPlayer Demo` 是一个学习和理解 Android 音频播放功能的好例子,通过这个示例,开发者可以了解到如何在自己的应用程序中集成音乐播放功能,为用户提供丰富的媒体体验。
在Android平台上,开发音乐播放应用是一项常见的任务,而`MediaPlayer`类是Android SDK提供的一种用于播放音频和视频的内置组件。本压缩包“Android应用源码之(MediaPlayer音乐)”提供了有关如何使用`MediaPlayer`...
1. 启动Service:通过startService()方法从Activity或其他组件启动Service,播放音乐。 2. 绑定Service:通过bindService()方法与Service建立连接,获取到IBinder接口,可以在Activity中直接控制Service。 七、服务...
5. `releaseResource()`: 释放资源函数,当不再需要播放音乐时,调用`MediaPlayer`的`release()`方法来释放占用的系统资源,防止内存泄漏。 最后,`listener()`方法中设置的事件监听器使得按钮与音乐播放函数关联,...
这个基础例子展示了如何使用SoundPool播放音乐,你可以根据需要扩展这个示例,比如添加音量控制、播放进度条、暂停和恢复功能等,从而构建一个完整的音乐播放器。在实际的音频处理应用中,理解并熟练运用SoundPool...
在iOS平台上,实现后台播放音乐并确保在锁屏后仍能显示音乐信息是一项重要的功能,尤其对于音乐类应用而言。为了实现这一目标,开发者需要掌握iOS的多媒体框架(Multimedia Framework)以及相关的系统服务。本篇文章...
### 一、使用MediaPlayer播放音频 #### 1.1 MediaPlayer简介 `MediaPlayer`是Android提供的一种用于播放音频和视频媒体文件的类。它支持多种媒体格式,并且能够播放网络上的流媒体。本例中主要关注的是其播放音频...
在这个例子中,我们学会了如何读取SD卡上的.mp3文件,创建ListView显示文件列表,以及使用MediaPlayer进行播放。注意在实际应用中,还需要处理播放状态的控制(如暂停、停止、前进、后退等),以及错误处理和资源...
RockPlayer可能是实现一个音乐播放器的实例,涉及到音频流播放,播放列表管理,以及可能的音频效果处理。这可能需要对MediaPlayer或AudioTrack类有深入理解。 10. **自定义服务(SpeakMessageService)** ...
- 要在Android应用中播放音乐,可以使用`MediaPlayer`类,它是Android SDK中内置的媒体播放组件,支持播放音频和视频文件。 - `MediaPlayer`类提供了如`setDataSource()`(设置数据源)、`prepare()`(准备播放)...
Android自定义音乐播放器的代码例子。支持展示音乐列表、滚动歌词,以及控制栏操作,另附演示用的一剪梅歌曲与歌词。另外演示了MediaRecorder/MediaPlayer组合、AudioRecord/AudioTrack,以及SoundPool对音频的处理...
编译项目后,WAV文件会被嵌入到最终的可执行文件中,这样即使在没有原始WAV文件的环境中,程序也能正常播放音乐。 需要注意的是,QMediaPlayer在播放某些WAV文件时可能会遇到问题,因为WAV格式支持多种编码和采样率...
**Service**: 在Android系统中,Service是一种在后台运行的组件,它不具有用户界面,可以执行长时间的操作,如播放音乐。在音乐播放应用中,我们通常创建一个Service来控制音乐播放,因为它可以在应用程序的前台或...
例如,我们可以通过HttpURLConnection或OkHttp库实现网络请求,通过SQLite数据库管理本地数据,通过MediaPlayer类播放音频和视频。 服务(Service)是Android中一种在后台运行的组件,常用于执行长时间的任务,如...
总结起来,这个“android service的小例子”展示了如何创建一个简单的播放器Service,它能够在后台持续播放音乐,即使用户离开应用。通过学习这个例子,初学者可以理解Service的基本概念和生命周期管理,以及如何在...
标签 "android 播放器" 确定了应用的主要功能,即在 Android 设备上播放音乐。在 Android 应用开发中,播放音频通常涉及到使用 Media Framework 或者其他音频处理库,如 Android SDK 中的 MediaPlayer 类。 在提供...