Android语音用户引导:播放assets中的音频资源

来源:互联网 发布:单片机与modbus 编辑:程序博客网 时间:2024/05/23 01:58

因为项目的需求,需要做出来一个语音的用户引导功能。就是当到某一个页面的时候,自动播放语音,告诉用户当前页面有哪些功能,应该怎么使用。恩,说实话,感觉这个功能稍微有点儿鸡肋。但是想着也不难实现,于是今天便着手做了起来。

概述

大概思路很简单了,设置里面设置一个语音的开关。然后采用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();      }