因為項目的需求,需要做出來一個語音的用戶引導功能。就是當到某一個頁面的時候,自動播放語音,告訴用戶當前頁面有哪些功能,應該怎么使用。恩,說實話,感覺這個功能稍微有點兒雞肋。但是想著也不難實現,于是今天便著手做了起來。
概述
大概思路很簡單了,設置里面設置一個語音的開關。然后采用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();
}