Android語音用戶引導:播放assets中的音頻資源

Android語音用戶引導:播放assets中的音頻資源,因為項目的需求,需要做出來一個語音的用戶引導功能。就是當到某一個頁面的時候,自動播放語音,告訴用戶當前頁面有哪些功能,應該怎麼使用。恩,說實話,感覺這個功能稍微有點兒雞肋。但是想著也不難實現,於是今天便著手做瞭起來。

概述

大概思路很簡單瞭,設置裡面設置一個語音的開關。然後采用sharepreference存儲起來。然後每個頁面根據存儲值決定是否播放特定音樂資源。

開始

整體功能的實現其實很簡單。因為要根據路徑找文件,所以有可能出現IO異常。所以最好try,catch包裹起來。主要代碼如下:

播放

private void play(String filename) {
        this.filename=filename;
        try {
            AssetManager assetManager = this.getAssets();   ////獲得該應用的AssetManager
            AssetFileDescriptor afd = assetManager.openFd(filename);   //根據文件名找到文件
            //對mediaPlayer進行實例化
            mediaPlayer = new MediaPlayer();
            if (mediaPlayer.isPlaying()) {
                mediaPlayer.reset();    //如果正在播放,則重置為初始狀態
            }
            mediaPlayer.setDataSource(afd.getFileDescriptor(),
                    afd.getStartOffset(), afd.getLength());     //設置資源目錄
            mediaPlayer.prepare();//緩沖
            mediaPlayer.start();//開始或恢復播放
        } catch (IOException e) {
            LogUtils.e("沒有找到這個文件");
            e.printStackTrace();
        }
    }

其他情況處理

    //如果失去焦點,停止播放
    @Override
    protected void onPause()
    {
        if(mediaPlayer.isPlaying())
        {
            //保存當前播放點
            position = mediaPlayer.getCurrentPosition();
            mediaPlayer.stop();
        }
        super.onPause();
    }

    //如果重新獲得焦點,繼續播放音樂
    @Override
    protected void onResume()
    {
        if(position>0 && filename!=null)
        {
            try
            {
                play(filename);
                mediaPlayer.seekTo(position);
                position = 0;
            }
            catch (Exception e)
            {
                LogUtils.e(e.toString());
            }
        }
        super.onResume();
    } 
    //退出時,對mediaPlayer進行回收 
    @Override  
    protected void onDestroy()   
    {  
        mediaPlayer.release();       
        super.onDestroy();  
    }  

You May Also Like