/**
*
*/
package org.crazyit.broadcast;
import java.io.IOException;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.IBinder;
/**
* Description:
* <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
* <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
* <br/>This program is protected by copyright laws.
* <br/>Program Name:
* <br/>Date:
* @author Yeeku.H.Lee kongyeeku@163.com
* @version 1.0
*/
public class MusicService extends Service
{
MyReceiver serviceReceiver;
AssetManager am;
String[] musics = new String[]{
"wish.mp3",
"promise.mp3",
"beautiful.mp3"
};
MediaPlayer mPlayer;
//当前的状态,0x11 代表没有播放 ;0x12代表 正在播放;0x13代表暂停
int status = 0x11;
// 记录当前正在播放的音乐
int current = 0;
@Override
public IBinder onBind(Intent intent)
{
return null;
}
@Override
public void onCreate()
{
am = getAssets();
// 创建BroadcastReceiver
serviceReceiver = new MyReceiver();
// 创建IntentFilter
IntentFilter filter = new IntentFilter();
filter.addAction(MusicBox.CTL_ACTION);
registerReceiver(serviceReceiver, filter);
// 创建MediaPlayer
mPlayer = new MediaPlayer();
// 为MediaPlayer播放完成事件绑定监听器
mPlayer.setOnCompletionListener(new OnCompletionListener()
{
@Override
public void onCompletion(MediaPlayer mp)
{
current++;
if (current >= 3)
{
current = 0;
}
/* 发送广播通知Activity更改文本框 */
Intent sendIntent = new Intent(MusicBox.UPDATE_ACTION);
sendIntent.putExtra("current", current);
// 发送广播 ,将被Activity组件中的BroadcastReceiver接收到
sendBroadcast(sendIntent);
// 准备、并播放音乐
prepareAndPlay(musics[current]);
}
});
super.onCreate();
}
public class MyReceiver extends BroadcastReceiver
{
@Override
public void onReceive(final Context context, Intent intent)
{
int control = intent.getIntExtra("control", -1);
switch (control)
{
// 播放或暂停
case 1:
// 原来处于没有播放状态
if (status == 0x11)
{
// 准备、并播放音乐
prepareAndPlay(musics[current]);
status = 0x12;
}
// 原来处于播放状态
else if (status == 0x12)
{
// 暂停
mPlayer.pause();
// 改变为暂停状态
status = 0x13;
}
// 原来处于暂停状态
else if (status == 0x13)
{
// 播放
mPlayer.start();
// 改变状态
status = 0x12;
}
break;
// 停止声音
case 2:
// 如果原来正在播放或暂停
if (status == 0x12 || status == 0x13)
{
// 停止播放
mPlayer.stop();
status = 0x11;
}
}
/* 发送广播通知Activity更改图标、文本框 */
Intent sendIntent = new Intent(MusicBox.UPDATE_ACTION);
sendIntent.putExtra("update", status);
sendIntent.putExtra("current", current);
// 发送广播 ,将被Activity组件中的BroadcastReceiver接收到
sendBroadcast(sendIntent);
}
}
private void prepareAndPlay(String music)
{
try
{
// 打开指定音乐文件
AssetFileDescriptor afd = am.openFd(music);
mPlayer.reset();
//使用MediaPlayer加载指定的声音文件。
mPlayer.setDataSource(afd.getFileDescriptor()
, afd.getStartOffset()
, afd.getLength());
// 准备声音
mPlayer.prepare();
// 播放
mPlayer.start();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
疯狂Android讲义源码10章 part2
共151个文件
class:50个
png:21个
xml:18个
5星 · 超过95%的资源 需积分: 9 21 下载量 4 浏览量
2011-09-01
16:02:38
上传
评论
收藏 28.45MB RAR 举报
温馨提示
本部分源码是,第十章的第二部分。因这章内容超过 40M,所以,与前面部分分开上传,还要分两部分才能上传完。
资源推荐
资源详情
资源评论
收起资源包目录
疯狂Android讲义源码10章 part2 (151个子文件)
resources.ap_ 9.55MB
resources.ap_ 15KB
resources.ap_ 15KB
resources.ap_ 15KB
resources.ap_ 14KB
resources.ap_ 14KB
MusicBox.apk 9.56MB
SortedBroadcast.apk 19KB
Broadcast.apk 18KB
LaunchService.apk 18KB
MonitorSms.apk 18KB
MonitorBattery.apk 17KB
proguard.cfg 1KB
proguard.cfg 1KB
proguard.cfg 1KB
proguard.cfg 1KB
proguard.cfg 1KB
proguard.cfg 1KB
MusicBox.class 3KB
MusicService.class 3KB
SmsReceiver.class 2KB
MusicService$MyReceiver.class 2KB
MusicBox$ActivityReceiver.class 1KB
MyReceiver.class 1KB
MusicService$1.class 1KB
SortedBroadcast$1.class 1KB
BroadcastMain$1.class 1KB
MyReceiver2.class 1KB
MyReceiver.class 1KB
BatteryReceiver.class 1KB
LaunchService$1.class 1KB
SortedBroadcast.class 992B
BroadcastMain.class 982B
LaunchReceiver.class 832B
LaunchService.class 787B
R.class 552B
R.class 552B
R.class 552B
R.class 507B
R.class 507B
R.class 507B
R$drawable.class 494B
R$id.class 478B
R$string.class 464B
R$string.class 464B
R$string.class 436B
R$string.class 436B
R$string.class 436B
R$string.class 436B
R$drawable.class 409B
R$drawable.class 409B
R$drawable.class 409B
R$drawable.class 409B
R$drawable.class 409B
R$layout.class 403B
R$layout.class 403B
R$layout.class 403B
R$layout.class 403B
R$layout.class 403B
R$layout.class 403B
R$id.class 391B
R$id.class 391B
R$attr.class 349B
R$attr.class 349B
R$attr.class 349B
R$attr.class 349B
R$attr.class 349B
R$attr.class 349B
.classpath 280B
.classpath 280B
.classpath 280B
.classpath 280B
.classpath 280B
.classpath 280B
classes.dex 7KB
classes.dex 4KB
classes.dex 4KB
classes.dex 3KB
classes.dex 3KB
classes.dex 2KB
MusicService.java 4KB
MusicBox.java 3KB
SmsReceiver.java 2KB
BroadcastMain.java 1KB
SortedBroadcast.java 1KB
MyReceiver.java 1KB
R.java 1KB
BatteryReceiver.java 966B
MyReceiver2.java 883B
LaunchService.java 825B
R.java 786B
R.java 786B
MyReceiver.java 777B
LaunchReceiver.java 706B
R.java 643B
R.java 643B
R.java 643B
promise.mp3 3.91MB
beautiful.mp3 3.16MB
wish.mp3 2.45MB
共 151 条
- 1
- 2
资源评论
- wangkai_eegets2012-07-17这本书看了两遍了,就是缺代码,终于找到代码了,呵呵
- 「已注销」2012-03-17确实是与疯狂android讲义一书相配套的程序源码,此处是其中一部分。对学习android的同学来说会很方便。感谢提供,谢谢。
jincf2011
- 粉丝: 165
- 资源: 39
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功