当前位置:操作系统 > 安卓/Android >>

Android试手——Dota铃声

手滑先发到博客频道了。。不知道现在这样算不算重复发帖。。……罪过
前段时间在论坛上看到一个帖子,说了一个关于短信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设置了相应的事件
Java代码 
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来暂时打开多媒体声音,播放完再关闭解决了这一问题。
Java代码 
//播放音效 
    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 { 
        @Override 
        public 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); 
  &

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,