Explorar o código

<初始化界面增加喇叭及麦克风录音测试>

weizhengliang %!s(int64=4) %!d(string=hai) anos
pai
achega
3ff4c523d7

+ 1 - 1
app/src/main/java/com/wdkl/callingbed2/service/SoundPoolManager.java

@@ -50,7 +50,7 @@ public class SoundPoolManager {
         //去电
         soundID.put(2, soundPool.load(MyApplication.getAppContext(), R.raw.outgoing_call, 1));
         //测试
-        soundID.put(3, soundPool.load(MyApplication.getAppContext(), R.raw.audio_test, 1));
+        soundID.put(3, soundPool.load(MyApplication.getAppContext(), R.raw.speaker_test, 1));
         soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
             @Override
             public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {

+ 119 - 11
app/src/main/java/com/wdkl/callingbed2/ui/InitActivity.java

@@ -5,10 +5,14 @@ import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.graphics.drawable.AnimationDrawable;
+import android.media.MediaPlayer;
+import android.media.MediaRecorder;
 import android.net.ConnectivityManager;
 import android.net.NetworkInfo;
+import android.os.Environment;
 import android.os.Handler;
 import android.os.Message;
+import android.util.Log;
 import android.view.View;
 import android.widget.ImageView;
 
@@ -39,6 +43,9 @@ import org.greenrobot.eventbus.Subscribe;
 import org.greenrobot.eventbus.ThreadMode;
 import org.json.JSONObject;
 
+import java.io.File;
+import java.io.IOException;
+
 import butterknife.Bind;
 import butterknife.OnClick;
 import okhttp3.Call;
@@ -94,6 +101,11 @@ public class InitActivity extends BaseActivity implements SerialPortUtil.ISerial
         serialPortUtil = MyApplication.serialPortUtil;
         serialPortUtil.setOnDataReceiveListener(this);
         serialPortUtil.setOnDataReceiveStringListener(this);
+
+        File file = new File(TEST_AUDIO_FILE_PATH);
+        if (!file.exists()) {
+            file.mkdir();
+        }
     }
 
     @Override
@@ -404,6 +416,14 @@ public class InitActivity extends BaseActivity implements SerialPortUtil.ISerial
         }).start();*/
     }
 
+
+    private boolean isRecord = false;
+    private boolean isPlay = false;
+    public static final String TEST_AUDIO_FILE_PATH = Environment.getExternalStorageDirectory().getPath() + "/test";
+    private String audiofilePath;
+    private MediaRecorder mediaRecorder;
+    private MediaPlayer mediaPlayer;
+
     /**
      * 监听呼叫按钮 buffer[5]   如果按下则 放松注册信息给后台
      */
@@ -434,20 +454,23 @@ public class InitActivity extends BaseActivity implements SerialPortUtil.ISerial
             new Thread(new Runnable() {
                 @Override
                 public void run() {
-                    final boolean pingStatus = NetUtil.ping("192.168.101.1", 2, null);
-                    runOnUiThread(new Runnable() {
-                        @Override
-                        public void run() {
-                            if (pingStatus) {
-                                ToastUtil.showToast("连接192.168.101.1成功!");
-                            } else {
-                                ToastUtil.showToast("连接192.168.101.1失败, 请检查设备!");
-                            }
-                        }
-                    });
+                    boolean pingStatus = NetUtil.ping("192.168.101.1", 2, null);
+                    if (pingStatus) {
+                        showTips("连接192.168.101.1成功!");
+                    } else {
+                        showTips("连接192.168.101.1失败, 请检查设备!");
+                    }
                 }
             }).start();
         }
+
+        //测试麦克风录音
+        if (buffer[6] == 2) {
+            if (!isRecord && !isPlay) {
+                startRecording();
+                updateHandler.sendEmptyMessageDelayed(111, 3000);
+            }
+        }
     }
 
     @Override
@@ -464,6 +487,86 @@ public class InitActivity extends BaseActivity implements SerialPortUtil.ISerial
         }
     }
 
+    private void showTips(final String tips) {
+        runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                ToastUtil.showToast(tips);
+            }
+        });
+    }
+
+    private void startRecording() {
+        showTips("开始录音");
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                mediaRecorder = new MediaRecorder();
+                try {
+                    audiofilePath = TEST_AUDIO_FILE_PATH + "/" + System.currentTimeMillis() + "_test.mp3";
+
+                    mediaRecorder.setOutputFile(audiofilePath);
+                    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 设置MediaRecorder的音频源为麦克风
+                    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);// 设置MediaRecorder录制的音频格式
+                    mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);// 设置MediaRecorder录制音频的编码为amr
+                    mediaRecorder.prepare();
+                    mediaRecorder.start();
+                }  catch (IOException e) {
+                    Log.i("error", "call startAmr(File mRecAudioFile) failed!" + e.getMessage());
+                } finally {
+                    isRecord = false;
+                }
+            }
+        }).start();
+    }
+
+    private void stopRecord() {
+        showTips("结束录音");
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    mediaRecorder.stop();
+                    mediaRecorder.release();
+                    mediaRecorder = null;
+                    Thread.sleep(200);
+
+                    mediaPlayer = new MediaPlayer();
+                    mediaPlayer.reset();
+                    mediaPlayer.setDataSource(audiofilePath);
+                    mediaPlayer.setVolume(1.0f, 1.0f);
+                    mediaPlayer.prepare();
+                    mediaPlayer.start();
+                    mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
+                        @Override
+                        public void onCompletion(MediaPlayer player) {
+                            File file = new File(audiofilePath);
+                            if (file.exists()) {
+                                file.delete();
+                            }
+                            mediaPlayer.release();
+                        }
+                    });
+                    mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
+                        @Override
+                        public boolean onError(MediaPlayer player, int what, int extra) {
+                            File file = new File(audiofilePath);
+                            if (file.exists()) {
+                                file.delete();
+                            }
+                            mediaPlayer.release();
+                            return false;
+                        }
+                    });
+                }catch (Exception e) {
+                    e.printStackTrace();
+                } finally {
+                    isPlay = false;
+                }
+            }
+        }).start();
+    }
+
     @SuppressLint("HandlerLeak")
     Handler updateHandler = new Handler() {
         public void handleMessage(Message msg) {
@@ -475,6 +578,11 @@ public class InitActivity extends BaseActivity implements SerialPortUtil.ISerial
                     ethreboot();
                     dateRefresh();
                     break;
+                case 111:
+                    if (!isPlay) {
+                        stopRecord();
+                    }
+                    break;
             }
         }
     };

app/src/main/res/raw/audio_test.mp3 → app/src/main/res/raw/speaker_test.mp3