前段时间在论坛上看到一个帖子,说了一个关于短信dota铃声的主意,正好自己在学习Android,就当试手做了一下,拿来分享一下,因为功力还非常浅,还希望大家多给提点意见,不管是从代码规范也好,实现方式也好。

程序主要功能是在短信来时播放超神(Holy Shit)的音效,并且在一定时间内如果继续有短信,则会继续播放Holy Shit Double Kill,Holy Shit Triple Kill。。。程序界面上就放了3个按钮,分别是用于启用,停止和设置间隔时间的,原来想稍微弄点图片美化下,后来也没弄


整个程序的逻辑是非常简单的,只是开启一个Service监听短信的事件,在短信到达后进行声音播放的处理,牵涉到的主要是Service,Broadcast,MediaPlayer,还有为了设置间隔时间还用了最简单的Preference。

为了让帖子不显得太简陋,贴上一些简单的代码,程序有3个类,分别是主程序Activity,后台跑的Service,以及设置用的PreferenceActivity

Activity中没有什么特别的地方,就是为3个Button设置了相应的事件

startButton.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {//Toast.makeText(DotaBellActivity.this, "start", Toast.LENGTH_SHORT).show();Intent serviceIntent=new Intent();serviceIntent.setClass(DotaBellActivity.this, BellService.class);startService(serviceIntent);}});        endButton.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {//Toast.makeText(DotaBellActivity.this, "end", Toast.LENGTH_SHORT).show();//停止服务Intent serviceIntent=new Intent();serviceIntent.setClass(DotaBellActivity.this, BellService.class);stopService(serviceIntent);}});        configButton.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {//Toast.makeText(DotaBellActivity.this, "config", Toast.LENGTH_SHORT).show();Intent preferenceIntent=new Intent();preferenceIntent.setClass(DotaBellActivity.this, BellConfigPreference.class);startActivity(preferenceIntent);}});

Service中就是主要的一些处理部分,包含了存放铃声的Map和播放铃声等逻辑处理,第一次做的时候由于是采用MediaPlayer来播放,出现了用户多媒体声音关闭时候没有效果的情况,后来通过AudioManager来暂时打开多媒体声音,播放完再关闭解决了这一问题。

//播放音效private void playBell(Context context, int num) {//为防止用户当前模式关闭了media音效 先将media打开am=(AudioManager)getSystemService(Context.AUDIO_SERVICE);//获取音量控制currentMediaStatus=am.getStreamVolume(AudioManager.STREAM_MUSIC);currentMediaMax=am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);am.setStreamVolume(AudioManager.STREAM_MUSIC, currentMediaMax, 0);//创建MediaPlayer 进行播放MediaPlayer mp = MediaPlayer.create(context, getBellResource());mp.setOnCompletionListener(new musicCompletionListener());mp.start();}private class musicCompletionListener implements OnCompletionListener {@Overridepublic void onCompletion(MediaPlayer mp) {//播放结束释放mp资源mp.release();//恢复用户之前的media模式am.setStreamVolume(AudioManager.STREAM_MUSIC, currentMediaStatus, 0);}}//获取当前应该播放的铃声private int getBellResource() {//判断时间间隔(毫秒)int preferenceInterval;long interval;Date curTime = new Date(System.currentTimeMillis());interval=curTime.getTime()-lastSMSTime.getTime();lastSMSTime=curTime;preferenceInterval=getPreferenceInterval();if(interval<preferenceInterval*60*1000&&!justStart){currentBell++;if(currentBell>5){currentBell=5;}}else{currentBell=1;}justStart=false;return bellMap.get(currentBell);}//获取Preference设置private int getPreferenceInterval(){SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);int interval=Integer.valueOf(settings.getString("interval_config", "5"));//Log.v("COOKIE", "interval: "+interval);return interval;}

Preference中就没有逻辑代码,都通过xml文件搞定了

附上工程以及apk文件(其实就在工程bin目录下),个人觉得像自己经常打游戏忘了回短信之类的。。猛的holyshit一下还是可以提提神的

同时也希望通过交流认识更多的朋友,不管是Android,java,C#,甚至前端等等,本人患严重拖延症,一个人就容易闲下来,所以希望更多的学习碰撞可以让自己一直保持热情,上述的小程序也当是给征友找伙伴投石问路,如果达人们愿意平时指导指导小弟,交流交流技术,可以短消息联系,大家共同进步。

尽管拍砖~~

更多相关文章

  1. Android入门进阶教程(1)-android扫盲
  2. 学习Android界面设计的超级利器HierarchyView.bat
  3. 通过Html网页调用本地安卓(android)app程序代码
  4. activity 启动流程分析
  5. Android(安卓)运行 C/C++程序 (使用 arm-linux-gcc 交叉编译环境
  6. Android(安卓)机器人:使用系统资源
  7. Android(安卓)Notification 的使用
  8. Android中怎么让你的layout适应屏幕的大小
  9. Google Android操作系统四大特点

随机推荐

  1. android 使用intent传递参数实现乘法计算
  2. 如何获取Android唯一标识(唯一序列号)
  3. Android(安卓)检测SD卡应用
  4. 【Android(安卓)Studio使用教程6】Execut
  5. 调整recovery界面菜单字体大小
  6. ArcGIS API For Android离线地图的实现
  7. android中动态和静态版本都有的库
  8. Android深入浅出之Audio(1,2,3)
  9. Android中贪吃蛇游戏的学习(三)
  10. Android(安卓)横竖屏操作