当我的Android模拟器响起Robert Miles Children的歌曲时,我直接趴下去睡着了。虽然实现播放,但是醒来时发现还是一堆bug,噼里啪啦,搞定初步。
有老师开了两天的android课,当实习,多奇葩,看到我们40多岁的嵌入式老师也在学,而且满满的笔记,活到老,学到老。
开场动画一张:
播放界面一张:
01版本未完善,直接读取sdcard根目录,显示文件名在ListView上,可以点击播放,也可以控制暂停和停止,歌曲播放完后停止,未完善的地方:上下曲不能针对正在播放的曲子上下,还有SeekBar不能控制歌曲。还有正在播放的曲目。
开场动画:
Log.java里面
ImageView iv = (ImageView)findViewById(R.id.welcome);
AlphaAnimation aa = new AlphaAnimation(1f, 1f);
//动画开启1.5秒
aa.setDuration(1500);
iv.startAnimation(aa);
动画维持1.5秒后,再过度到主界面MusicPlayerActivity.java。
在主页面为按钮的点击添加监听器,用intent,像个包裹一样,能传进一些变量的值。一个是按钮动作:
Intent intent=new Intent(Constant.controlaction);
intent.putExtra("cmd", Constant.pause);
MusicPlayerActivity.this.sendBroadcast(intent);
还有一个是更新页面,主要就是歌曲时间:
IntentFilter filter=new IntentFilter();
filter.addAction(Constant.updateaction);
this.registerReceiver(uiupdate, filter);
这种是动态的注册广播,静态的广播是直接在Manifest配置,前者可以自己Destroy。他就在向外界宣布,播放了,改页面了。通过Broadcast机制,广播能接上包裹,传给接收者。这样和直接去直接改动类的成员变量相比,大大减少了耦合性。
发来的广播,需要继承BroadcastReceiver来接收他们。
对应于两个继承BroadcastReceiver的两个类ControlReceiver和UIUpdate。ControlReceiver根据当前音乐的播放状态,再发广播给UIUpdate进行更新。
当你关掉主页面,放到后台的播放,需要Service。而且ControlReceiver的动态注册就写在这里面。
this.startService(new Intent(this,MyMusicPlayerService.class));
一个打不死的东西,kill之后还能满血复活。这里用了MyMusicPlayerService去继承Service。
最后,我发现有个比我更厉害的人,一个大学玩大肠杆菌的培养基的,到后面自己编程,没完成不回家,从老师听来的,是个女的。。
看的是吴亚峰老师的一本开发书,用了老师的一张背景图片,代码没用过老师的,因为自己之前先敲了。系统自带的ImageButton的图片少了停止,用了暂停代替。主要就是为了了解Service,Broadcast, Intent这些东西的结合。
附上源码:http://download.csdn.net/detail/iaiti/6439615
很晚了,去睡觉了。