音乐播放demo知识点总结

package org.crazyit.broadcast;

import android.app.Activity;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.ImageButton;

import android.widget.TextView;

/**

* Description:

* <br/>site: <a href="http://www.crazyit.org">crazyit.org</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 [email protected]

* @version  1.0

*/

public class MusicBox extends Activity

implements OnClickListener

{

// 获取界面中显示歌曲标题、作者文本框

TextView title , author;

//播放/暂停、停止按钮

ImageButton play , stop;

ActivityReceiver activityReceiver;

public static final String CTL_ACTION

= "org.crazyit.action.CTL_ACTION";

public static final String UPDATE_ACTION

= "org.crazyit.action.UPDATE_ACTION";

// 定义音乐的播放状态,0x11代表没有播放;0x12代表正在播放;0x13代表暂停

int status = 0x11;

String[] titleStrs = new String[]{

"心愿",

"约定",

"美丽新世界"

};

String[] authorStrs = new String[]{

"未知艺术家",

"周蕙",

"伍佰"

};

@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

// 获取程序界面界面中的两个按钮

play = (ImageButton) this.findViewById(R.id.play);

stop = (ImageButton) this.findViewById(R.id.stop);

title = (TextView) findViewById(R.id.title);

author = (TextView) findViewById(R.id.author);

// 为两个按钮的单击事件添加监听器

play.setOnClickListener(this);

stop.setOnClickListener(this);

activityReceiver = new ActivityReceiver();

// 创建IntentFilter

IntentFilter filter = new IntentFilter();

// 指定BroadcastReceiver监听的Action

filter.addAction(UPDATE_ACTION);

// 注册BroadcastReceiver

registerReceiver(activityReceiver, filter);

Intent intent = new Intent(this, MusicService.class);

// 启动后台Service

startService(intent);

}

// 自定义的BroadcastReceiver,负责监听从Service传回来的广播

public class ActivityReceiver extends BroadcastReceiver

{

@Override

public void onReceive(Context context, Intent intent)

{

// 获取Intent中的update消息,update代表播放状态

int update = intent.getIntExtra("update", -1);

// 获取Intent中的current消息,current代表当前正在播放的歌曲

int current = intent.getIntExtra("current", -1);

if(current >= 0)

{

title.setText(titleStrs[current]);

author.setText(authorStrs[current]);

}

switch (update)

{

case 0x11:

play.setImageResource(R.drawable.play);

status = 0x11;

break;

// 控制系统进入播放状态

case 0x12:

// 播放状态下设置使用暂停图标

play.setImageResource(R.drawable.pause);

// 设置当前状态

status = 0x12;

break;

// 控制系统进入暂停状态

case 0x13:

// 暂停状态下设置使用播放图标

play.setImageResource(R.drawable.play);

// 设置当前状态

status = 0x13;

break;

}

}

}

@Override

public void onClick(View source)

{

// 创建Intent

Intent intent = new Intent("org.crazyit.action.CTL_ACTION");

switch (source.getId())

{

// 按下播放/暂停按钮

case R.id.play:

intent.putExtra("control", 1);

break;

// 按下停止按钮

case R.id.stop:

intent.putExtra("control", 2);

break;

}

// 发送广播 ,将被Service组件中的BroadcastReceiver接收到

sendBroadcast(intent);

}

}

/**

*

*/

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 [email protected]

* @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();

}

}

}

1:动态注册广播

activityReceiver = new ActivityReceiver();

// 创建IntentFilter

IntentFilter filter = new IntentFilter();

// 指定BroadcastReceiver监听的Action

filter.addAction(UPDATE_ACTION);

// 注册BroadcastReceiver

registerReceiver(activityReceiver, filter);

2:服务启动:

Intent intent = new Intent(this, MusicService.class);

// 启动后台Service

startService(intent);

3:服务的onCreate方法对音乐播放需要用的数据的初始化

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()//media音乐播放完的监听

{//Register a callback to be invoked when the end of a media source has been reached during playback

@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();

}

服务一般处理这样的逻辑就是我们用户看不到的东西一般在各个地方我们都可以调用他就像是全局的

广播是处理这样的东西广播里主要有个onReceive方法所以我只能称他只是一个方法,但是这个方法有个特点在任何地方都可以调用他只要我们发送广播,他不仅仅能在我们应用的各个地方使用并且在我们应用程序不启动的时候其他应用也可以调用这个广播,广播可以帮我们节省内存空间,帮我们处理应用之间调用问题广播是全局的不仅仅在应用内

时间: 2024-08-06 11:01:35

音乐播放demo知识点总结的相关文章

在线音乐播放Demo

package com.multimediademo7audiohttpplayer; import android.app.Activity; import android.media.MediaPlayer; import android.media.MediaPlayer.OnBufferingUpdateListener; import android.media.MediaPlayer.OnCompletionListener; import android.media.MediaPl

【前端】h5音乐播放demo 可关闭可播放

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 13.0px "Helvetica Neue" } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 13.0px "Helvetica Neue"; min-height: 15.0px } p.p3 { margin: 0.0px 0.0px 0.

jqm视频播放器,html5视频播放器,html5音乐播放器,html5播放器,video开发demo,html5视频播放示例,html5手机视频播放器

最近在论坛中看到了很多实用html5开发视频播放,音乐播放的功能,大部分都在寻找答案.因此我就在这里做一个demo,供大家相互学习.html5开发越来越流行了,而对于视频这一块也是必不可少的一部分.如何让你的网站占据优势,就要看你的功能和用户体验了.html5对video还是做了很多优惠的东西,我们使用起来很得心应手. 在过去 flash 是网页上最好的解决视频的方法,截至到目前还算是主流,像那些优酷之类的视频网站.虾米那样的在线音乐网站,仍然使用 flash 来提供播放服务.但是这种状况将会随

论自作音乐播放器涉及知识点总结

1.内容提供者查找手机SD卡下的音乐 配置读取SD卡权限 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> //调用方法List<Good> list = GetMusic.Music(MainActivity.this); package com.bawei.day07_music; import java.util.ArrayList; import com.

用H5+Boostrap做简单的音乐播放器

用H5+Boostrap做简单的音乐播放器 前言:这个是综合一下我最近在学的东西做的小Demo,到实际使用还有距离,但是用来练手巩固知识点还是不错的,最近在二刷JS书和Boostrap.css的源码,做完这个Demo也算是暂告一段落,接下来是jQuery的源码和Boostrap.js的源码,任务很艰巨呢,加油~在此就不整篇的贴代码了,如果感兴趣的小伙伴可以发消息给我,可以把代码传给你们~ 正文: 先上效果图 1.布局:Boostrap里的响应式和自适应布局是自然跑不掉的,container中嵌套

H5+Boostrap的音乐播放器

H5+Boostrap做简单的音乐播放器 前言:这个是综合一下我最近在学的东西做的小Demo,到实际使用还有距离,但是用来练手巩固知识点还是不错的,最近在二刷JS书和Boostrap.css的源码,做完这个Demo也算是暂告一段落,接下来是jQuery的源码和Boostrap.js的源码,任务很艰巨呢,加油~在此就不整篇的贴代码了,如果感兴趣的小伙伴可以发消息给我,可以把代码传给你们~ 正文: 先上效果图 1.布局:Boostrap里的响应式和自适应布局是自然跑不掉的,container中嵌套r

音乐播放器

一个小Demo 功能实现:列表页面和播放页面 知识点:歌词拆分 --- 把一首歌词拆分 --- 每一句拆分为一个模型 --- 所有的模型放到数组中 --- 工具类(单例)--- 私有属性 // 歌词拆分 -(void)lyricArrayWith:(BCCMusic *)model { // 数组清零 [self.allDataArray removeAllObjects]; NSString *lyricStr = model.lyric; // 每行歌词 NSArray *array = [

简易音乐播放器制作

制作简易音乐播放器: 1.功能:音乐列表,播放,暂停,上一曲,下一曲,进度条(显示进度时间,控制进度),随机播放,单曲循环,顺序播放,歌词显示等 2.使用框架:AVFoundation 3.知识点:AVPlayer 使用,pch 文件使用,封装思想,MVC模式,storyBoard的使用,消息发送机制,观察者,block回调,nstimer,nsrunloop,空间约束,第三方使用等 详细过程: 一.布局 :使用 storyBoard 布局 1.歌曲列表界面:使用 TableViewContro

html网页音乐播放器自带播放列表

基于网页的音乐播放器demo  http://pan.baidu.com/s/1dDgm7HR 自己diy了一个手机端在线音乐播放器演示地址http://shanxi2014.com/zhuandizhi/dom.php 全面支持手机端浏览器. 主要修改引用路径(不要修改文件相对存放地址) 第二就是正则拼接参数了 <script src="/city/js/libs/jquery-1.10.2.min.js"></script> <script src=&