Android 個推之後語音播報遇到的坑

2021-10-03 14:15:18 字數 1997 閱讀 3427

我用到的是原聲的mediaplayer和texttospeech。首先封裝乙個類,

mmanager = (audiomanager) objects.requirenonnull(mcontext).getsystemservice(context.audio_service);

int max = mmanager.getstreammaxvolume(audiomanager.stream_music);

int scurrent = mmanager.getstreamvolume(audiomanager.stream_music);

logutils.e(tag, "max volume: " + max);

logutils.e(tag, "current volume: " + scurrent);

//設定系統音量為現在的音量

mmanager.setstreamvolume(audiomanager.stream_music, scurrent, 0);

mmanager.requestaudiofocus(mlistener, audiomanager.stream_music, audiomanager.audiofocus_gain_transient);

if (mmediaplayer == null)

mmediaplayer.setonpreparedlistener(mp -> logutils.e(tag, "prepared: "));

mmediaplayer.setoncompletionlistener(mp -> );

mmediaplayer.setonerrorlistener((mp, what, extra) -> );

smediaplayer = mediaplayer.create(mcontext, r.raw.blank_audio);

soptions.put(texttospeech.engine.key_param_utterance_id, "utterance");

@override

public void ondone(string utteranceid)

}logutils.e(tag, "ondone: mpushlist: " + arrays.tostring(mpushlist.toarray()));

if (mpushlist.size() > 0) else

}@override

public void onerror(string utteranceid)

});

當我收到個推之後,呼叫mediaplayer.start方法,在setoncompletionlistener裡面進行tts的語音播報 private static void speak(string data)

最後退出登入之後,釋放掉資源

public static void clear()

if (mmediaplayer != null)

if (mlistener != null)

if (mdisposable != null)

}下面就是我遇到的坑了,基礎是mvp框架裡面,mainactivity中的mainfragment中退出,在ondestroy方法裡面呼叫clear()釋放資源之後,會重新開啟loginactivity中的loginfragment,當再次進入之後,語音不播報了。

首先分析是因為上次建立的mediaplayer被釋放了,然後沒有資源了,肯定不會播報啊,但是,當在loginfragment的oncreatview初始化之後,還是不行,經過多天的踩坑(自己太菜),發現之前呼叫的ondestroy中clear的時候,會在loginfragment的oncreatview方法之後呼叫,再次初始化的meadiplayer又被釋放掉了。然後在mainfragment的oncreat裡面再進行初始化,然後就沒事了。整體總結來說:fragment之間的生命週期順序的問題。(至今還不算很明白,求教!!!!)第一次寫文章,邏輯混亂,見諒!希望能幫到你。

Android簡訊收到,語音播報

傳送簡訊功能介面 傳送簡訊demo description author ldm date 2016 4 22 上午9 07 53 public class smsactivity extends activity implements onclicklistener 註冊簡訊監聽廣播 descri...

Android簡訊收到,語音播報

傳送簡訊功能介面 傳送簡訊demo description author ldm date 2016 4 22 上午9 07 53 public class smsactivity extends activity implements onclicklistener 註冊簡訊監聽廣播 descri...

android 科大訊飛語音播報簡單整合

2.在main目錄下匯入相對應的so檔案 3.新增許可權,許可權可按自己需求而定 4.同步專案 並進行初始化操作 private void initkdxf 5.放入語音播報的語音檔案 語音檔案在官網demo裡面附帶可自行搜尋 注 免費的 6.在相對應的播報頁面進行播報 private void i...