因为项目的需求,需要做出来一个语音的用户引导功能。就是当到某一个页面的时候,自动播放语音,告诉用户当前页面有哪些功能,应该怎么使用。恩,说实话,感觉这个功能稍微有点儿鸡肋。但是想着也不难实现,于是今天便着手做了起来。
概述
大概思路很简单了,设置里面设置一个语音的开关。然后采用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();
}
网友评论