在这里我们可能会遇到一下问题: 1.U3D C# 与 Android Java之间是怎么通讯 2.Android怎么调用原生的录音功能和播放功能
好,我们逐一解决问题
1.U3D C# 与 Android Java之间是怎么通讯
相比iOS,Android这边会比较简单些 再C# 中这样调用Android的接口
AndroidJavaClass javaclass = new AndroidJavaClass("com.Unity3D.player.UnityPlayer"); javaobject.Call (methodName);
所以在com.unity3d.player.UnityPlayer中定义的接口都可以通过上述方法去调用,值得注意的是,如果要U3D直接修改Android界面上的东西,不用能直接在接口中修改,可以在Android接口中用这样调用 this.runOnUiThread(new Runnable() { @Override public void run() { //调用Android接口逻辑 } });
或者是用Message //设置消息 Message msg = new Message(); msg.what =“methodName”;
Handler messageHandler = new Handler() { public void handleMessage(Message e){ //调用Android接口逻辑 } //发送事件消息 messageHandler.sendMessage(msg);
好了,反过来,如果Android要发送消息给U3D,可以调用unity-class.jar提供的接口 UnityPlayer.UnitySendMessage(String a,String b,String c); 和iOS一样,第一个参数是场景中的GameObject名字,第二个参数是组件中的方法名字,第三个参数是任意的消息参数。这样,U3D和Android相互间的消息发送就完成了。
2.Android怎么调用原生的录音功能和播放功能
与iOS类似,我们需要引入安卓原生的录音类和音频播放类 import android.media.MediaRecorder; import android.media.MediaPlayer;
MediaRecorder 我们创建MediaRecorder对象来录制音频 MediaRecorder mRecorder = new MediaRecorder(); mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置音频来源(MIC表示麦克风) mRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR); // 设置音频输出格式 mRecorder.setOutputFile(voiceDataPath);//设置输出文件mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); // 设置音频编码为AMR mRecorder.setMaxDuration(20300);//设置录音时长 mRecorder.setAudioEncodingBitRate(4000); mRecorder.setAudioSamplingRate(8000);//采样率 mRecorder.prepare(); //开始录制 mRecorder.start();
//结束录制 mRecorder.stop(); mRecorder.release();
voiceDataPath路径为录制文件输出路径,与iOS不同,录制文件格式可以直接输出为ARM格式。同时可以设置录制事件的回调函数 mRecorder.setOnInfoListener(new MediaRecorder.OnInfoListener() { //设置回调 @Override public void onInfo(MediaRecorder arg0, int arg1, int arg2) { if(arg1 == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED){//到达最长录音时间限制 speakStop( ); } } });
MediaPlayer 播放音频更加简单,传入音频文件路径就可以了 MediaPlayer mPlayer = new MediaPlayer(); mPlayer.setDataSource(voiceDataPath); mPlayer.prepare(); //开始播放 mPlayer.start();
//结束播放 mPlayer.stop(); mPlayer.release(); 也可以设置播放完成的事件回调 mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {//播放完毕回调监听 @Override public void onCompletion(MediaPlayer arg0) { stopPlay( ); } }); 与iOS不同,Android中不需要把ARM格式的音频转为wav,MediaPlayer类可以直接播放ARM格式的音频。
好了,Android版的语音聊天大概就点到这里来了,流程基本和iOS的类似,只是Android的API可以直接支持ARM音频格式的录制和播放,用起来也相当的方便。 |
|