沈斌
2018-05-15 04926b864b4026d81f95d78f9ecb3f7806960569
app/src/main/java/com/moral/yunfushao/fragment/FragmentMonitor.java
@@ -6,7 +6,6 @@
import android.bluetooth.BluetoothGattCharacteristic;
import android.bluetooth.BluetoothGattService;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.AssetManager;
import android.media.MediaPlayer;
@@ -53,6 +52,7 @@
import com.moral.yunfushao.model.UpLoadParam;
import com.moral.yunfushao.model.VoiceBean;
import com.moral.yunfushao.ui.PanelView;
import com.moral.yunfushao.utils.DebugUtils;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
@@ -83,16 +83,85 @@
    private PanelView pv;
    private ImageView iv_his, iv_status, iv_search, iv_bottom_status, iv_dianliang;
    private BluetoothService mBluetoothService;
    private ArrayList<String> realResult = new ArrayList<>();
    private ArrayList<String> realHourResult = new ArrayList<>();
    private ArrayList<String> realHisResult = new ArrayList<>();
//    private ArrayList<String> realResult = new ArrayList<>();
//    private ArrayList<String> realHourResult = new ArrayList<>();
//    private ArrayList<String> realHisResult = new ArrayList<>();
    //上传数据
    private ArrayList<RecData> submitResult = new ArrayList<>();
    private StringBuilder stringResult = new StringBuilder();
    //临时存储上传数据
    private ArrayList<RecData> submitTempResult = new ArrayList<>();
    private Timer heartTimer, resTimer, chonglianTimer;
    Handler handler = new Handler();
    private Handler handler = new Handler();
    private Runnable runnable = new Runnable(){
        @Override
        public void run() {
            checkTime();
            checkTimeCount++;
            handler.postDelayed(this, 5000);
        }
    };
    private int checkTimeCount = 0;
    private void doHandleData(String result) {
        if(StringUtils.isEmpty(result)) {
            return;
        }
        //如果包含"时间校准成功确认信号"或重试5次以上则停止继续校准时间操作
        if(result.startsWith(BLECommon.BLE_REC_TIME) || checkTimeCount > 5) {
            DebugUtils.sendData("data", result);
            handler.removeCallbacks(runnable);
            checkTimeCount = 0;
            result = result.substring(14);
            doHandleData(result);
        }
        if(result.startsWith("3A")) {
            if(result.length() >= 16) {
                DebugUtils.sendData("data", result);
                parseHisData(result.substring(0, 16));
                result = result.substring(16);
                doHandleData(result);
            } else {
                stringResult.append(result);
            }
        }
        if(result.startsWith("5A")) {
            if(result.length() >= 40) {
                DebugUtils.sendData("data", result);
                parseCurrentData(result.substring(0, 40));
                result = result.substring(40);
                doHandleData(result);
            } else {
                stringResult.append(result);
            }
        }
        if(result.startsWith("7A")) {
            if(result.length() >= 8) {
                DebugUtils.sendData("data", result);
                parseHoutData(result.substring(0, 8));
                mBluetoothService.write(mBluetoothService.getWirteCharacteristic().getService().getUuid().toString(), mBluetoothService.getWirteCharacteristic().getUuid().toString(), BLECommon.BLE_SEND_7A, null);
                result = result.substring(8);
                doHandleData(result);
            } else {
                stringResult.append(result);
            }
        }
    }
    /**
     * 接收
@@ -150,10 +219,23 @@
                                    public void run() {
                                        Log.d("haijiang123", "收到消息====" + StringUtils.byteArrayToHexStr(characteristic.getValue()));
                                        String result = StringUtils.byteArrayToHexStr(characteristic.getValue());
                                        //处理数据叠罗汉
                                        stringResult.append(result);
                                        result = stringResult.toString();
                                        doHandleData(result);
                                        stringResult = new StringBuilder();
                                        //实时数据
                                        parseCurrentData(result);
                                        parseHisData(result);
                                        parseHoutData(result);
//                                        parseCurrentData(result);
//                                        parseHisData(result);
//                                        parseHoutData(result);
//
//                                        if (result.startsWith("7A")) {
//                                            mBluetoothService.write(mBluetoothService.getWirteCharacteristic().getService().getUuid().toString(), mBluetoothService.getWirteCharacteristic().getUuid().toString(), BLECommon.BLE_SEND_7A, null);
//                                        }
                                    }
                                });
                            }
@@ -172,12 +254,8 @@
                /**
                 * 发送时间校准
                 */
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        checkTime();
                    }
                }, 500);
                handler.postDelayed(runnable, 5000);
                /**
                 * 一连上先发数据包
                 */
@@ -436,7 +514,7 @@
                    message.what = 1;
                    heartHandler.sendMessage(message);
                }
            }, 0, 1000 * 60);
            }, 0, 1000 * 10);
        }
    }
@@ -549,17 +627,17 @@
     */
    private int preLevel = -1;
    private void parseCurrentData(String result) {
        if (result.startsWith("5A")) {
            realResult.clear();
            realResult.add(result);
        } else {
            realResult.add(result);
        }
        String nowResult = "";
        for (String s : realResult) {
            nowResult += s;
        }
    private void parseCurrentData(String nowResult) {
//        if (result.startsWith("5A")) {
//            realResult.clear();
//            realResult.add(result);
//        } else {
//            realResult.add(result);
//        }
//        String nowResult = "";
//        for (String s : realResult) {
//            nowResult += s;
//        }
        /**
         * 20个字节,5A开头  5B结尾
         */
@@ -631,7 +709,7 @@
                play(2);
            }
            submitResult.add(data);
            realResult.clear();
//            realResult.clear();
        }
    }
@@ -642,28 +720,32 @@
     */
    private AlertDialog testDialog;
    private void parseHoutData(String result) {
        if (result.startsWith("7A")) {
            realHourResult.clear();
            realHourResult.add(result);
        } else {
            realHourResult.add(result);
        }
        String nowResult = "";
        for (String s : realHourResult) {
            nowResult += s;
        }
    private void parseHoutData(String nowResult) {
//        if (result.startsWith("7A")) {
//            realHourResult.clear();
//            realHourResult.add(result);
//        } else {
//            realHourResult.add(result);
//        }
//        String nowResult = "";
//        for (String s : realHourResult) {
//            nowResult += s;
//        }
        if (!TextUtils.isEmpty(nowResult) && nowResult.length() == 8 && nowResult.startsWith("7A") && nowResult.endsWith("7B")) {
            //-----------------------Test------------------------------------------//
//            String aaa = MainApp.theApp.sharedPreferencesUtil.getTest()+"\n"+nowResult+"   收到时间:"+TimeUtil.getCurrentDate("yyyy-MM-dd HH:mm:ss");
//            MainApp.theApp.sharedPreferencesUtil.saveTest(aaa);
            //-----------------------Test------------------------------------------//
            if(DebugUtils.debug_mode) {
                //-----------------------Test------------------------------------------//
                String aaa = MainApp.theApp.sharedPreferencesUtil.getTest()+"\n"+nowResult+"   收到时间:"+TimeUtil.getCurrentDate("yyyy-MM-dd HH:mm:ss");
                MainApp.theApp.sharedPreferencesUtil.saveTest(aaa);
                //-----------------------Test------------------------------------------//
            }
            test(nowResult, TimeUtil.getCurrentDate("yyyy-MM-dd HH:mm:ss"));
            int hourValue = Integer.parseInt(nowResult.substring(2, 4), 16) * 256 + Integer.parseInt(nowResult.substring(4, 6), 16);
//            Log.d("haijiang", "收到消息小时数据="+ nowResult+"高位:"+nowResult.substring(2, 4)+"|"+Integer.parseInt(nowResult.substring(2, 4), 16) * 256+"低位:"+nowResult.substring(4, 6)+"|"+Integer.parseInt(nowResult.substring(4, 6), 16) +"数值:"+(hourValue/100.0));
            sendHourDataRec();
            //sendHourDataRec();
            RecData data = new RecData();
            data.setType(1);
            data.setIs_warn(0);
@@ -678,24 +760,26 @@
    /**
     * 孕妇哨连接后上传的数据
     */
    private void parseHisData(String result) {
        if (result.startsWith("3A")) {
            realHisResult.clear();
            realHisResult.add(result);
        } else {
            realHisResult.add(result);
        }
        String nowResult = "";
        for (String s : realHisResult) {
            nowResult += s;
        }
    private void parseHisData(String nowResult) {
//        if (result.startsWith("3A")) {
//            realHisResult.clear();
//            realHisResult.add(result);
//        } else {
//            realHisResult.add(result);
//        }
//        String nowResult = "";
//        for (String s : realHisResult) {
//            nowResult += s;
//        }
        if (!TextUtils.isEmpty(nowResult) && nowResult.length() == 16 && nowResult.startsWith("3A") && nowResult.endsWith("3B")) {
            Log.d("hourdata", "=====nowResult=====" + nowResult);
            //-----------------------Test------------------------------------------//
//            String aaa = MainApp.theApp.sharedPreferencesUtil.getTest()+"\n"+nowResult;
//            MainApp.theApp.sharedPreferencesUtil.saveTest(aaa);
            //-----------------------Test------------------------------------------//
            if(DebugUtils.debug_mode) {
                //-----------------------Test------------------------------------------//
                String aaa = MainApp.theApp.sharedPreferencesUtil.getTest() + "\n" + nowResult;
                MainApp.theApp.sharedPreferencesUtil.saveTest(aaa);
                //-----------------------Test------------------------------------------//
            }
            String year = "20" + Integer.parseInt(nowResult.substring(2, 4), 16);
            String month = Integer.parseInt(nowResult.substring(4, 6), 16) + "";
@@ -738,7 +822,24 @@
        blesb.append(toHex(Integer.toHexString((now.get(Calendar.HOUR_OF_DAY)))));
        blesb.append(toHex(Integer.toHexString((now.get(Calendar.MINUTE)))));
        blesb.append("4B");
        mBluetoothService.write(mBluetoothService.getWirteCharacteristic().getService().getUuid().toString(), mBluetoothService.getWirteCharacteristic().getUuid().toString(), blesb.toString(), null);
        boolean result = mBluetoothService.write(mBluetoothService.getWirteCharacteristic().getService().getUuid().toString(), mBluetoothService.getWirteCharacteristic().getUuid().toString(), blesb.toString(), new BleCharacterCallback() {
            @Override
            public void onSuccess(BluetoothGattCharacteristic characteristic) {
                String val = StringUtils.byteArrayToHexStr(characteristic.getValue());
                DebugUtils.sendData("time", val);
            }
            @Override
            public void onFailure(BleException exception) {
            }
            @Override
            public void onInitiatedResult(boolean result) {
                //DebugUtils.sendData("time", String.valueOf(result));
            }
        });
        DebugUtils.sendData("time", String.valueOf(result));
    }
    private String toHex(String s) {