Android試手——Dota鈴聲 – Android移動開發技術文章_手機開發 Android移動開發教學課程

手滑先發到博客頻道瞭。。不知道現在這樣算不算重復發帖。。……罪過
前段時間在論壇上看到一個帖子,說瞭一個關於短信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); 
    } 
    //獲取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文件(其實工程裡也有),個人覺得像自己經常打遊戲忘瞭回短信之類的。。猛的holyshit一下還是可以提提神的
同時也希望通過交流認識更多的朋友,不管是Android,java,C#,甚至前端等等,本人患嚴重拖延癥,一個人就容易閑下來,所以希望更多的學習碰撞可以讓自己一直保持熱情,上述的小程序也當是給征友找夥伴投石問路,如果達人們願意平時指導指導小弟,交流交流技術,可以短消息聯系,大傢共同進步。

發佈留言