|
在這里我們可能會(huì)遇到一下問題: 1.U3D C# 與 Android Java之間是怎么通訊 2.Android怎么調(diào)用原生的錄音功能和播放功能
好,我們逐一解決問題
1.U3D C# 與 Android Java之間是怎么通訊
相比iOS,Android這邊會(huì)比較簡單些 再C# 中這樣調(diào)用Android的接口
AndroidJavaClass javaclass = new AndroidJavaClass("com.Unity3D.player.UnityPlayer"); javaobject.Call (methodName);
所以在com.unity3d.player.UnityPlayer中定義的接口都可以通過上述方法去調(diào)用,值得注意的是,如果要U3D直接修改Android界面上的東西,不用能直接在接口中修改,可以在Android接口中用這樣調(diào)用 this.runOnUiThread(new Runnable() { @Override public void run() { //調(diào)用Android接口邏輯 } });
或者是用Message //設(shè)置消息 Message msg = new Message(); msg.what =“methodName”;
Handler messageHandler = new Handler() { public void handleMessage(Message e){ //調(diào)用Android接口邏輯 } //發(fā)送事件消息 messageHandler.sendMessage(msg);
好了,反過來,如果Android要發(fā)送消息給U3D,可以調(diào)用unity-class.jar提供的接口 UnityPlayer.UnitySendMessage(String a,String b,String c); 和iOS一樣,第一個(gè)參數(shù)是場景中的GameObject名字,第二個(gè)參數(shù)是組件中的方法名字,第三個(gè)參數(shù)是任意的消息參數(shù)。這樣,U3D和Android相互間的消息發(fā)送就完成了。
2.Android怎么調(diào)用原生的錄音功能和播放功能
與iOS類似,我們需要引入安卓原生的錄音類和音頻播放類 import android.media.MediaRecorder; import android.media.MediaPlayer;
MediaRecorder 我們創(chuàng)建MediaRecorder對(duì)象來錄制音頻 MediaRecorder mRecorder = new MediaRecorder(); mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 設(shè)置音頻來源(MIC表示麥克風(fēng)) mRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR); // 設(shè)置音頻輸出格式 mRecorder.setOutputFile(voiceDataPath);//設(shè)置輸出文件mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); // 設(shè)置音頻編碼為AMR mRecorder.setMaxDuration(20300);//設(shè)置錄音時(shí)長 mRecorder.setAudioEncodingBitRate(4000); mRecorder.setAudioSamplingRate(8000);//采樣率 mRecorder.prepare(); //開始錄制 mRecorder.start();
//結(jié)束錄制 mRecorder.stop(); mRecorder.release();
voiceDataPath路徑為錄制文件輸出路徑,與iOS不同,錄制文件格式可以直接輸出為ARM格式。同時(shí)可以設(shè)置錄制事件的回調(diào)函數(shù) mRecorder.setOnInfoListener(new MediaRecorder.OnInfoListener() { //設(shè)置回調(diào) @Override public void onInfo(MediaRecorder arg0, int arg1, int arg2) { if(arg1 == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED){//到達(dá)最長錄音時(shí)間限制 speakStop( ); } } });
MediaPlayer 播放音頻更加簡單,傳入音頻文件路徑就可以了 MediaPlayer mPlayer = new MediaPlayer(); mPlayer.setDataSource(voiceDataPath); mPlayer.prepare(); //開始播放 mPlayer.start();
//結(jié)束播放 mPlayer.stop(); mPlayer.release(); 也可以設(shè)置播放完成的事件回調(diào) mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {//播放完畢回調(diào)監(jiān)聽 @Override public void onCompletion(MediaPlayer arg0) { stopPlay( ); } }); 與iOS不同,Android中不需要把ARM格式的音頻轉(zhuǎn)為wav,MediaPlayer類可以直接播放ARM格式的音頻。
好了,Android版的語音聊天大概就點(diǎn)到這里來了,流程基本和iOS的類似,只是Android的API可以直接支持ARM音頻格式的錄制和播放,用起來也相當(dāng)?shù)姆奖恪?/p> |
|
|