From 3bd6e9023e011336da840e11a9d48bb31c7a0261 Mon Sep 17 00:00:00 2001
From: 陈奇 <1650699704@qq.com>
Date: Wed, 07 Nov 2018 09:31:59 +0800
Subject: [PATCH] [*]将电磁版本的唤醒心跳改成两秒,唤醒之后回到30一次心跳 [*]整体版本页面显示的绝对安全换成了安全 [*]自定义语音修改和优化,添加了无声的选择

---
 .gradle/4.1/taskHistory/taskHistory.bin                                  |    0 
 app/src/main/java/com/moral/yunfushao/ui/PanelView.java                  |    4 
 .gradle/4.1/javaCompile/classAnalysis.bin                                |    0 
 andbrickslib/andbrickslib.iml                                            |   81 +--
 key.jks                                                                  |    0 
 app/src/main/java/com/moral/yunfushao/fragment/FragmentSettings.java     |  175 +++++++--
 .gradle/4.1/taskHistory/fileSnapshots.bin                                |    0 
 app/src/main/java/com/moral/yunfushao/activity/VoiceSetActivity.java     |   11 
 FastBleLib/FastBleLib.iml                                                |   70 +--
 .gradle/4.1/fileHashes/resourceHashesCache.bin                           |    0 
 app/build.gradle                                                         |   42 +-
 andbrickslib/src/main/java/com/moral/andbrickslib/utils/StringUtils.java |    2 
 app/app.iml                                                              |   83 +---
 FastBleLib/src/main/java/com/clj/fastble/bluetooth/BleBluetooth.java     |    2 
 .gradle/4.1/javaCompile/jarAnalysis.bin                                  |    0 
 .gradle/4.1/fileHashes/fileHashes.lock                                   |    0 
 app/src/main/java/com/moral/yunfushao/ble/BluetoothService.java          |   15 
 app/src/main/java/com/moral/yunfushao/utils/PermissionUtil.java          |   37 ++
 app/src/main/java/com/moral/yunfushao/activity/ChooseSongActivity.java   |   52 +-
 app/src/main/java/com/moral/yunfushao/ble/BLECommon.java                 |    3 
 app/src/main/res/mipmap-hdpi/tips.png                                    |    0 
 .gradle/4.1/javaCompile/taskJars.bin                                     |    0 
 app/src/main/res/anim/progress.xml                                       |   13 
 app/src/main/java/com/moral/yunfushao/fragment/FragmentMonitor.java      |  242 +++++-------
 app/src/main/res/layout/fragment_setting_layout.xml                      |   51 +-
 .gradle/4.1/fileHashes/fileHashes.bin                                    |    0 
 app/src/main/res/layout/fragment_monitor_layout.xml                      |   12 
 .gradle/4.1/javaCompile/javaCompile.lock                                 |    0 
 app/src/main/res/layout/ac_ble_search_layout.xml                         |   76 ++-
 app/src/main/res/mipmap-xxhdpi/tips.png                                  |    0 
 .gradle/4.1/taskHistory/taskHistory.lock                                 |    0 
 FastBleLib/src/main/java/com/clj/fastble/conn/BleConnector.java          |   23 
 app/src/main/java/com/moral/yunfushao/MainActivity.java                  |   19 
 app/src/main/java/com/moral/yunfushao/adapter/BleDeviceAdapter.java      |    1 
 .gradle/4.1/javaCompile/taskHistory.bin                                  |    0 
 app/src/main/java/com/moral/yunfushao/activity/BLESearchActivity.java    |    9 
 36 files changed, 561 insertions(+), 462 deletions(-)

diff --git a/.gradle/4.1/fileHashes/fileHashes.bin b/.gradle/4.1/fileHashes/fileHashes.bin
index 99885b1..37aa106 100644
--- a/.gradle/4.1/fileHashes/fileHashes.bin
+++ b/.gradle/4.1/fileHashes/fileHashes.bin
Binary files differ
diff --git a/.gradle/4.1/fileHashes/fileHashes.lock b/.gradle/4.1/fileHashes/fileHashes.lock
index d2965bf..b42e628 100644
--- a/.gradle/4.1/fileHashes/fileHashes.lock
+++ b/.gradle/4.1/fileHashes/fileHashes.lock
Binary files differ
diff --git a/.gradle/4.1/fileHashes/resourceHashesCache.bin b/.gradle/4.1/fileHashes/resourceHashesCache.bin
index 30b12df..7555000 100644
--- a/.gradle/4.1/fileHashes/resourceHashesCache.bin
+++ b/.gradle/4.1/fileHashes/resourceHashesCache.bin
Binary files differ
diff --git a/.gradle/4.1/javaCompile/classAnalysis.bin b/.gradle/4.1/javaCompile/classAnalysis.bin
index 04d2f06..9f709de 100644
--- a/.gradle/4.1/javaCompile/classAnalysis.bin
+++ b/.gradle/4.1/javaCompile/classAnalysis.bin
Binary files differ
diff --git a/.gradle/4.1/javaCompile/jarAnalysis.bin b/.gradle/4.1/javaCompile/jarAnalysis.bin
index 2e8a73e..8c09110 100644
--- a/.gradle/4.1/javaCompile/jarAnalysis.bin
+++ b/.gradle/4.1/javaCompile/jarAnalysis.bin
Binary files differ
diff --git a/.gradle/4.1/javaCompile/javaCompile.lock b/.gradle/4.1/javaCompile/javaCompile.lock
index f540802..aa1aed5 100644
--- a/.gradle/4.1/javaCompile/javaCompile.lock
+++ b/.gradle/4.1/javaCompile/javaCompile.lock
Binary files differ
diff --git a/.gradle/4.1/javaCompile/taskHistory.bin b/.gradle/4.1/javaCompile/taskHistory.bin
index 786a006..ba376eb 100644
--- a/.gradle/4.1/javaCompile/taskHistory.bin
+++ b/.gradle/4.1/javaCompile/taskHistory.bin
Binary files differ
diff --git a/.gradle/4.1/javaCompile/taskJars.bin b/.gradle/4.1/javaCompile/taskJars.bin
index dee8b54..68a7e63 100644
--- a/.gradle/4.1/javaCompile/taskJars.bin
+++ b/.gradle/4.1/javaCompile/taskJars.bin
Binary files differ
diff --git a/.gradle/4.1/taskHistory/fileSnapshots.bin b/.gradle/4.1/taskHistory/fileSnapshots.bin
index 164c708..0aae236 100644
--- a/.gradle/4.1/taskHistory/fileSnapshots.bin
+++ b/.gradle/4.1/taskHistory/fileSnapshots.bin
Binary files differ
diff --git a/.gradle/4.1/taskHistory/taskHistory.bin b/.gradle/4.1/taskHistory/taskHistory.bin
index 7443fe3..7874806 100644
--- a/.gradle/4.1/taskHistory/taskHistory.bin
+++ b/.gradle/4.1/taskHistory/taskHistory.bin
Binary files differ
diff --git a/.gradle/4.1/taskHistory/taskHistory.lock b/.gradle/4.1/taskHistory/taskHistory.lock
index 655a050..c955dac 100644
--- a/.gradle/4.1/taskHistory/taskHistory.lock
+++ b/.gradle/4.1/taskHistory/taskHistory.lock
Binary files differ
diff --git a/FastBleLib/FastBleLib.iml b/FastBleLib/FastBleLib.iml
index 52f5e6f..71d5486 100644
--- a/FastBleLib/FastBleLib.iml
+++ b/FastBleLib/FastBleLib.iml
@@ -8,11 +8,11 @@
     </facet>
     <facet type="android" name="Android">
       <configuration>
-        <option name="SELECTED_BUILD_VARIANT" value="debug" />
-        <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
-        <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
+        <option name="SELECTED_BUILD_VARIANT" value="release" />
+        <option name="ASSEMBLE_TASK_NAME" value="assembleRelease" />
+        <option name="COMPILE_JAVA_TASK_NAME" value="compileReleaseSources" />
         <afterSyncTasks>
-          <task>generateDebugSources</task>
+          <task>generateReleaseSources</task>
         </afterSyncTasks>
         <option name="ALLOW_USER_CONFIGURATION" value="false" />
         <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
@@ -24,46 +24,32 @@
     </facet>
   </component>
   <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7">
-    <output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
-    <output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/debug" />
+    <output url="file://$MODULE_DIR$/build/intermediates/classes/release" />
+    <output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/release" />
     <exclude-output />
     <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/test/debug" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/release" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/release" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/release" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/release" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/release" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/release" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/release" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/test/release" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/release/res" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/release/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/release/assets" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/release/aidl" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/release/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/release/rs" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/release/shaders" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testRelease/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testRelease/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testRelease/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testRelease/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testRelease/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testRelease/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testRelease/shaders" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
diff --git a/FastBleLib/src/main/java/com/clj/fastble/bluetooth/BleBluetooth.java b/FastBleLib/src/main/java/com/clj/fastble/bluetooth/BleBluetooth.java
index e02a858..003c7af 100644
--- a/FastBleLib/src/main/java/com/clj/fastble/bluetooth/BleBluetooth.java
+++ b/FastBleLib/src/main/java/com/clj/fastble/bluetooth/BleBluetooth.java
@@ -449,7 +449,6 @@
         @Override
         public void onServicesDiscovered(BluetoothGatt gatt, int status) {
             BleLog.i("BleGattCallback���onServicesDiscovered " + mtu);
-            bluetoothGatt.requestMtu(mtu);
             connectionState = STATE_SERVICES_DISCOVERED;
             Iterator iterator = callbackHashMap.entrySet().iterator();
             while (iterator.hasNext()) {
@@ -459,6 +458,7 @@
                     ((BluetoothGattCallback) call).onServicesDiscovered(gatt, status);
                 }
             }
+            bluetoothGatt.requestMtu(mtu);
         }
 
         @Override
diff --git a/FastBleLib/src/main/java/com/clj/fastble/conn/BleConnector.java b/FastBleLib/src/main/java/com/clj/fastble/conn/BleConnector.java
index 39a8596..0707b79 100644
--- a/FastBleLib/src/main/java/com/clj/fastble/conn/BleConnector.java
+++ b/FastBleLib/src/main/java/com/clj/fastble/conn/BleConnector.java
@@ -130,6 +130,8 @@
                 && (getCharacteristic().getProperties() | BluetoothGattCharacteristic.PROPERTY_NOTIFY) > 0) {
             BleLog.w(TAG, "characteristic.getProperties():" + getCharacteristic().getProperties());
 
+            System.out.println("chenqi enableCharacteristicNotify =>" + uuid_notify);
+
             handleCharacteristicNotificationCallback(bleCallback, uuid_notify);
 
             return setCharacteristicNotification(getBluetoothGatt(), getCharacteristic(), true, bleCallback);
@@ -342,18 +344,8 @@
                                                           final String uuid_notify) {
         if (bleCallback != null) {
 
-//            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-//                bluetoothGatt.requestMtu(10);
-//            }
             listenAndTimer(bleCallback, MSG_NOTIFY_CHA, uuid_notify, new BluetoothGattCallback() {
                 AtomicBoolean msgRemoved = new AtomicBoolean(false);
-
-
-                @Override
-                public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
-                    super.onConnectionStateChange(gatt, status, newState);
-                }
-
                 @Override
                 public void onCharacteristicChanged(BluetoothGatt gatt,
                                                     BluetoothGattCharacteristic characteristic) {
@@ -361,10 +353,9 @@
                         handler.removeMessages(MSG_NOTIFY_CHA, this);
                     }
 
+                    System.out.println("chenqi Notify Hex ->" + BleBluetooth.dumpHex(characteristic.getValue()));
 
                     if (characteristic.getUuid().equals(UUID.fromString(uuid_notify))) {
-                        System.out.println("chenqi Notify ->" + characteristic.getValue().length);
-                        System.out.println("chenqi Notify Hex ->" + BleBluetooth.dumpHex(characteristic.getValue()));
                         bleCallback.onSuccess(characteristic);
                     }
                 }
@@ -387,6 +378,7 @@
                 @Override
                 public void onCharacteristicChanged(BluetoothGatt gatt,
                                                     BluetoothGattCharacteristic characteristic) {
+                    System.out.println("chenqi Notify Hex indicate->" + BleBluetooth.dumpHex(characteristic.getValue()));
                     if (!msgRemoved.getAndSet(true)) {
                         handler.removeMessages(MSG_INDICATE_DES, this);
                     }
@@ -410,6 +402,8 @@
                 public void onCharacteristicWrite(BluetoothGatt gatt,
                                                   BluetoothGattCharacteristic characteristic, int status) {
                     handler.removeMessages(MSG_WRITE_CHA, this);
+                    System.out.println("chenqi Notify Hex write->" + BleBluetooth.dumpHex(characteristic.getValue()));
+
 
                     if (status == BluetoothGatt.GATT_SUCCESS) {
                         if (characteristic.getUuid().equals(UUID.fromString(uuid_write))) {
@@ -435,6 +429,8 @@
                 @Override
                 public void onCharacteristicRead(BluetoothGatt gatt,
                                                  BluetoothGattCharacteristic characteristic, int status) {
+                    System.out.println("chenqi Notify Hex indicate read->" + BleBluetooth.dumpHex(characteristic.getValue()));
+
                     if (!msgRemoved.getAndSet(true)) {
                         handler.removeMessages(MSG_READ_CHA, this);
                     }
@@ -460,6 +456,8 @@
                 @Override
                 public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status) {
                     handler.removeMessages(MSG_READ_RSSI, this);
+                    System.out.println("chenqi Notify Hex rssi->" + BleBluetooth.dumpHex(characteristic.getValue()));
+
                     if (status == BluetoothGatt.GATT_SUCCESS) {
                         bleCallback.onSuccess(rssi);
                     } else {
@@ -487,7 +485,6 @@
     private void listenAndTimer(BleCallback bleCallback, int what, String uuid, BluetoothGattCallback callback) {
         bleCallback.setBluetoothGattCallback(callback);
         bleBluetooth.addGattCallback(uuid, callback);
-
         Message msg = handler.obtainMessage(what, bleCallback);
         handler.sendMessageDelayed(msg, timeOutMillis);
     }
diff --git a/andbrickslib/andbrickslib.iml b/andbrickslib/andbrickslib.iml
index cf8b7b2..4c2e7ee 100644
--- a/andbrickslib/andbrickslib.iml
+++ b/andbrickslib/andbrickslib.iml
@@ -8,11 +8,11 @@
     </facet>
     <facet type="android" name="Android">
       <configuration>
-        <option name="SELECTED_BUILD_VARIANT" value="debug" />
-        <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
-        <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
+        <option name="SELECTED_BUILD_VARIANT" value="release" />
+        <option name="ASSEMBLE_TASK_NAME" value="assembleRelease" />
+        <option name="COMPILE_JAVA_TASK_NAME" value="compileReleaseSources" />
         <afterSyncTasks>
-          <task>generateDebugSources</task>
+          <task>generateReleaseSources</task>
         </afterSyncTasks>
         <option name="ALLOW_USER_CONFIGURATION" value="false" />
         <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
@@ -24,46 +24,32 @@
     </facet>
   </component>
   <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7">
-    <output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
-    <output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/debug" />
+    <output url="file://$MODULE_DIR$/build/intermediates/classes/release" />
+    <output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/release" />
     <exclude-output />
     <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/test/debug" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/release" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/release" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/release" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/release" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/release" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/release" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/release" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/test/release" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/release/res" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/release/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/release/assets" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/release/aidl" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/release/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/release/rs" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/release/shaders" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testRelease/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testRelease/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testRelease/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testRelease/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testRelease/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testRelease/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testRelease/shaders" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
@@ -130,16 +116,5 @@
     <orderEntry type="library" name="Gradle: com.android.support:support-core-utils-25.3.1" level="project" />
     <orderEntry type="library" name="Gradle: com.squareup.okio:okio:1.9.0@jar" level="project" />
     <orderEntry type="library" name="Gradle: com.afollestad.material-dialogs:commons-0.9.4.4" level="project" />
-    <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-idling-resource-2.2.2" level="project" />
-    <orderEntry type="library" scope="TEST" name="Gradle: javax.annotation:javax.annotation-api:1.2@jar" level="project" />
-    <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-core-2.2.2" level="project" />
-    <orderEntry type="library" scope="TEST" name="Gradle: com.squareup:javawriter:2.1.1@jar" level="project" />
-    <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:rules-0.5" level="project" />
-    <orderEntry type="library" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:2.0.1@jar" level="project" />
-    <orderEntry type="library" scope="TEST" name="Gradle: javax.inject:javax.inject:1@jar" level="project" />
-    <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:runner-0.5" level="project" />
-    <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:exposed-instrumentation-api-publish-0.5" level="project" />
-    <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-library:1.3@jar" level="project" />
-    <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-integration:1.3@jar" level="project" />
   </component>
 </module>
\ No newline at end of file
diff --git a/andbrickslib/src/main/java/com/moral/andbrickslib/utils/StringUtils.java b/andbrickslib/src/main/java/com/moral/andbrickslib/utils/StringUtils.java
index d541ff0..503a25a 100644
--- a/andbrickslib/src/main/java/com/moral/andbrickslib/utils/StringUtils.java
+++ b/andbrickslib/src/main/java/com/moral/andbrickslib/utils/StringUtils.java
@@ -453,6 +453,6 @@
         for (int i = start; i <= end; i++) {
             buffer.append(strings[i]);
         }
-        return buffer.toString();
+        return buffer.toString().trim();
     }
 }
diff --git a/app/app.iml b/app/app.iml
index 1006a91..9736502 100644
--- a/app/app.iml
+++ b/app/app.iml
@@ -8,11 +8,11 @@
     </facet>
     <facet type="android" name="Android">
       <configuration>
-        <option name="SELECTED_BUILD_VARIANT" value="debug" />
-        <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
-        <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
+        <option name="SELECTED_BUILD_VARIANT" value="release" />
+        <option name="ASSEMBLE_TASK_NAME" value="assembleRelease" />
+        <option name="COMPILE_JAVA_TASK_NAME" value="compileReleaseSources" />
         <afterSyncTasks>
-          <task>generateDebugSources</task>
+          <task>generateReleaseSources</task>
         </afterSyncTasks>
         <option name="ALLOW_USER_CONFIGURATION" value="false" />
         <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
@@ -23,46 +23,32 @@
     </facet>
   </component>
   <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7">
-    <output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
-    <output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/debug" />
+    <output url="file://$MODULE_DIR$/build/intermediates/classes/release" />
+    <output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/release" />
     <exclude-output />
     <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/test/debug" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/release" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/release" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/release" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/release" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/release" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/release" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/release" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/test/release" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/release/res" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/release/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/release/assets" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/release/aidl" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/release/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/release/rs" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/release/shaders" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testRelease/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testRelease/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testRelease/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testRelease/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testRelease/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testRelease/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testRelease/shaders" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
@@ -140,19 +126,6 @@
     <orderEntry type="library" name="Gradle: com.android.support:support-vector-drawable-25.3.1" level="project" />
     <orderEntry type="library" name="Gradle: com.squareup.okio:okio:1.9.0@jar" level="project" />
     <orderEntry type="library" name="Gradle: com.android.support:support-core-utils-25.3.1" level="project" />
-    <orderEntry type="module" module-name="andbrickslib" />
-    <orderEntry type="module" module-name="FastBleLib" />
-    <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-idling-resource-2.2.2" level="project" />
-    <orderEntry type="library" scope="TEST" name="Gradle: javax.annotation:javax.annotation-api:1.2@jar" level="project" />
-    <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-core-2.2.2" level="project" />
-    <orderEntry type="library" scope="TEST" name="Gradle: com.squareup:javawriter:2.1.1@jar" level="project" />
-    <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:rules-0.5" level="project" />
-    <orderEntry type="library" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:2.0.1@jar" level="project" />
-    <orderEntry type="library" scope="TEST" name="Gradle: javax.inject:javax.inject:1@jar" level="project" />
-    <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:runner-0.5" level="project" />
-    <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:exposed-instrumentation-api-publish-0.5" level="project" />
-    <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-library:1.3@jar" level="project" />
-    <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-integration:1.3@jar" level="project" />
     <orderEntry type="module" module-name="andbrickslib" />
     <orderEntry type="module" module-name="FastBleLib" />
   </component>
diff --git a/app/build.gradle b/app/build.gradle
index 1460c65..6afc232 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,16 +8,18 @@
         minSdkVersion 21
         targetSdkVersion 25
         versionCode 2
-        versionName "1.0.2_sp3"
+        versionName "1.0.2_sp10"
         testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
         signingConfig signingConfigs.debug
     }
+
+
     signingConfigs {
         key {
-            keyAlias 'qxpc'
-            keyPassword '123456'
-            storeFile file('../pregnancy_guard_android/qixingpiaochong')
-            storePassword '123456'
+            keyAlias 'moral'
+            keyPassword 'moral123456'
+            storeFile file('../pregnancy_guard_android/key.jks')
+            storePassword 'moral123456'
         }
     }
     sourceSets {
@@ -54,22 +56,22 @@
     androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
         exclude group: 'com.android.support', module: 'support-annotations'
     })
-    compile 'com.android.support:appcompat-v7:25.3.1'
-    compile 'com.android.support.constraint:constraint-layout:1.0.2'
-    compile 'com.android.support:cardview-v7:25.3.1'
-    testCompile 'junit:junit:4.12'
-    compile project(':andbrickslib')
-    compile project(':FastBleLib')
+    implementation 'com.android.support:appcompat-v7:25.3.1'
+    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
+    implementation 'com.android.support:cardview-v7:25.3.1'
+    testImplementation 'junit:junit:4.12'
+    implementation project(':andbrickslib')
+    implementation project(':FastBleLib')
     //������������
-    compile 'in.srain.cube:ultra-ptr:1.0.11'
+    implementation 'in.srain.cube:ultra-ptr:1.0.11'
     //������������
-    compile 'com.github.bumptech.glide:glide:3.7.0'
+    implementation 'com.github.bumptech.glide:glide:3.7.0'
     //������������
-    compile 'com.lzy.net:okgo:2.1.4'
-    compile files('libs/BaiduLBS_Android.jar')
-    compile 'pub.devrel:easypermissions:0.4.0'
-    compile 'com.daimajia.numberprogressbar:library:1.4@aar'
-    compile 'org.greenrobot:eventbus:3.0.0'
-    compile 'com.github.lecho:hellocharts-library:1.5.8@aar'
-    compile 'com.contrarywind:Android-PickerView:3.1.2'
+    implementation 'com.lzy.net:okgo:2.1.4'
+    implementation files('libs/BaiduLBS_Android.jar')
+    implementation 'pub.devrel:easypermissions:0.4.0'
+    implementation 'com.daimajia.numberprogressbar:library:1.4@aar'
+    implementation 'org.greenrobot:eventbus:3.0.0'
+    implementation 'com.github.lecho:hellocharts-library:1.5.8@aar'
+    implementation 'com.contrarywind:Android-PickerView:3.1.2'
 }
diff --git a/app/src/main/java/com/moral/yunfushao/MainActivity.java b/app/src/main/java/com/moral/yunfushao/MainActivity.java
index 2740b3f..3887a73 100644
--- a/app/src/main/java/com/moral/yunfushao/MainActivity.java
+++ b/app/src/main/java/com/moral/yunfushao/MainActivity.java
@@ -6,6 +6,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.ServiceConnection;
+import android.content.pm.PackageManager;
 import android.graphics.Color;
 import android.graphics.drawable.ColorDrawable;
 import android.os.AsyncTask;
@@ -43,6 +44,7 @@
 import com.moral.yunfushao.model.EventMessage;
 import com.moral.yunfushao.model.User;
 import com.moral.yunfushao.update.UpdateManager;
+import com.moral.yunfushao.utils.PermissionUtil;
 
 import org.greenrobot.eventbus.EventBus;
 import org.json.JSONException;
@@ -86,6 +88,7 @@
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         bindService();
+        PermissionUtil.verifyStoragePermissions(this);
     }
 
     @Override
@@ -213,6 +216,20 @@
         }
     }
 
+    @Override
+    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+
+        if (requestCode == 1) {
+            for (int i = 0; i < permissions.length; i++) {
+                if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
+                    //������������
+                    PermissionUtil.verifyStoragePermissions(this);
+                }
+            }
+        }
+    }
+
     UpdateManager manager = new UpdateManager(MainActivity.this);
 
     private class checkUpdateTask extends AsyncTask<String, Void, String> {
@@ -307,8 +324,6 @@
         public void onServiceDisconnected(ComponentName name) {
             mBluetoothService = null;
         }
-
-
     };
 
     private BluetoothService.Callback callback = new BluetoothService.Callback() {
diff --git a/app/src/main/java/com/moral/yunfushao/activity/BLESearchActivity.java b/app/src/main/java/com/moral/yunfushao/activity/BLESearchActivity.java
index a97f02c..913fd46 100644
--- a/app/src/main/java/com/moral/yunfushao/activity/BLESearchActivity.java
+++ b/app/src/main/java/com/moral/yunfushao/activity/BLESearchActivity.java
@@ -105,10 +105,10 @@
                     if (MainApp.theApp.bleManager != null) {
                         MainApp.theApp.bleManager.closeBluetoothGatt();
                     }
+                    mBluetoothService.connectDevice(scanResultList.get(position));
                     EventMessage eventMessage = new EventMessage();
                     eventMessage.setType(AppConfig.BLUETOOCH_CHANGE_CONNECT);
                     EventBus.getDefault().post(eventMessage);
-                    mBluetoothService.connectDevice(scanResultList.get(position));
                 }
             }
 
@@ -121,7 +121,8 @@
 
     @Override
     protected void initListener() {
-        iv_search.setOnClickListener(this);
+//        iv_search.setOnClickListener(this);
+        iv_searchpic.setOnClickListener(this);
     }
 
     @Override
@@ -132,7 +133,8 @@
     @Override
     protected void processClick(View view) {
         switch (view.getId()) {
-            case R.id.iv_search:
+            case R.id.iv_searchpic:
+                mBluetoothService.openBlueTooth();
                 if (isScan) {
                     if (mBluetoothService != null) {
                         mBluetoothService.cancelScan();
@@ -249,7 +251,6 @@
                 progressDialog.dismiss();
                 finish();
             }
-
         }
     };
 
diff --git a/app/src/main/java/com/moral/yunfushao/activity/ChooseSongActivity.java b/app/src/main/java/com/moral/yunfushao/activity/ChooseSongActivity.java
index be9d00a..8e95b39 100644
--- a/app/src/main/java/com/moral/yunfushao/activity/ChooseSongActivity.java
+++ b/app/src/main/java/com/moral/yunfushao/activity/ChooseSongActivity.java
@@ -3,48 +3,38 @@
 import android.content.Intent;
 import android.content.res.AssetManager;
 import android.media.MediaPlayer;
-import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
 import android.support.v7.widget.RecyclerView;
-import android.util.Log;
 import android.view.View;
 
-import com.lzy.okgo.cache.CacheMode;
 import com.moral.andbrickslib.baseadapter.headandfooter.DividerItemDecoration;
 import com.moral.andbrickslib.baseadapter.recyclerview.MultiItemTypeAdapter;
-import com.moral.yunfushao.MainApp;
 import com.moral.yunfushao.R;
 import com.moral.yunfushao.adapter.SongAdapter;
-import com.moral.yunfushao.adapter.VoiceAdapter;
 import com.moral.yunfushao.base.BaseListActivity;
-import com.moral.yunfushao.common.API;
-import com.moral.yunfushao.httputils.HttpCallBack;
-import com.moral.yunfushao.httputils.HttpUtils;
 import com.moral.yunfushao.model.Song;
-import com.moral.yunfushao.model.VoiceBean;
 import com.moral.yunfushao.utils.AudioUtils;
+import com.moral.yunfushao.utils.PermissionUtil;
 
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
 
 /**
  * Created by haijiang on 2017/7/12.
  */
 
-public class ChooseSongActivity extends BaseListActivity implements SongAdapter.OnBtnClickListener{
+public class ChooseSongActivity extends BaseListActivity implements SongAdapter.OnBtnClickListener {
     private SongAdapter adapter;
     private ArrayList<Song> voiceList = new ArrayList<>();
     AssetManager am;
     MediaPlayer mp;
-    Handler mHandler = new Handler(){
+    Handler mHandler = new Handler() {
         @Override
         public void handleMessage(Message msg) {
             super.handleMessage(msg);
-            if(msg.what == 1){
+            if (msg.what == 1) {
                 setNormalView();
                 mPtrFrame.refreshComplete();
                 adapter.notifyDataSetChanged();
@@ -52,9 +42,11 @@
         }
     };
     private int index;
+
     @Override
     protected void initOtherView() {
-        index = getIntent().getIntExtra("position",0);
+        PermissionUtil.verifyStoragePermissions(this);
+        index = getIntent().getIntExtra("position", 0);
         tv_title.setText("������������");
         DividerItemDecoration line = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST);
         mRecyclerView.addItemDecoration(line);
@@ -78,7 +70,6 @@
     protected void onLoadMore() {
 
 
-
     }
 
     @Override
@@ -89,7 +80,7 @@
     @Override
     protected void onDestroy() {
         super.onDestroy();
-        if(mp!=null&&mp.isPlaying()){
+        if (mp != null && mp.isPlaying()) {
             mp.stop();
             mp.release();
         }
@@ -104,18 +95,21 @@
     protected void initListener() {
 
     }
-     Thread mThread;
+
+    Thread mThread;
+
     @Override
     protected void initData() {
         getData();
     }
-    private void  getData(){
+
+    private void getData() {
         setLoadingView();
         mThread = new Thread(new Runnable() {
             @Override
             public void run() {
                 ArrayList<Song> temp = AudioUtils.getAllSongs(ChooseSongActivity.this);
-                if(temp!=null){
+                if (temp != null) {
                     voiceList.clear();
                     voiceList.addAll(temp);
                     mHandler.sendEmptyMessage(1);
@@ -127,7 +121,7 @@
 
     @Override
     protected void processClick(View view) {
-        switch (view.getId()){
+        switch (view.getId()) {
             case R.id.tv_left:
                 finish();
                 break;
@@ -143,14 +137,14 @@
     @Override
     public void playClick(int position) {
         Song voiceBean = voiceList.get(position);
-        if(voiceBean.isPlay()){
+        if (voiceBean.isPlay()) {
             mp.stop();
             voiceBean.setPlay(false);
-        }else{
-            if(mp!=null&&mp.isPlaying()){
+        } else {
+            if (mp != null && mp.isPlaying()) {
                 mp.stop();
                 mp.release();
-                for (Song voice :voiceList){
+                for (Song voice : voiceList) {
                     voice.setPlay(false);
                 }
                 adapter.notifyDataSetChanged();
@@ -171,10 +165,10 @@
     @Override
     public void setClick(int position) {
         Intent intent = new Intent();
-        intent.putExtra("position",index);
-        intent.putExtra("url",voiceList.get(position).getFileUrl());
-        intent.putExtra("name",voiceList.get(position).getTitle());
-        setResult(RESULT_OK,intent);
+        intent.putExtra("position", index);
+        intent.putExtra("url", voiceList.get(position).getFileUrl());
+        intent.putExtra("name", voiceList.get(position).getTitle());
+        setResult(RESULT_OK, intent);
         finish();
     }
 }
diff --git a/app/src/main/java/com/moral/yunfushao/activity/VoiceSetActivity.java b/app/src/main/java/com/moral/yunfushao/activity/VoiceSetActivity.java
index 5149048..9a8bd29 100644
--- a/app/src/main/java/com/moral/yunfushao/activity/VoiceSetActivity.java
+++ b/app/src/main/java/com/moral/yunfushao/activity/VoiceSetActivity.java
@@ -20,7 +20,6 @@
 import com.moral.yunfushao.R;
 import com.moral.yunfushao.adapter.VoiceAdapter;
 import com.moral.yunfushao.base.BaseListActivity;
-import com.moral.yunfushao.ble.BLECommon;
 import com.moral.yunfushao.common.API;
 import com.moral.yunfushao.common.AppConfig;
 import com.moral.yunfushao.httputils.HttpCallBack;
@@ -46,6 +45,7 @@
     MediaPlayer mp;
 
     private MaterialDialog resetDialog;
+    private int oldType = 0;
 
     private void showReset() {
         resetDialog = MaterialDialogUtils.showCallBaclDialog(this, "������������", "���������������������������?", new MaterialDialog.SingleButtonCallback() {
@@ -101,6 +101,8 @@
                 MainApp.theApp.sharedPreferencesUtil.saveVideoList(FastJsonTools.toJson(voiceList));
                 adapter.notifyDataSetChanged();
                 mToatUtils.showSingleLongToast("������������������");
+                oldType = MainApp.theApp.sharedPreferencesUtil.getVoiceType();
+                MainApp.theApp.sharedPreferencesUtil.saveVoiceType(3);
                 EventMessage eventMessage = new EventMessage();
                 eventMessage.setType(AppConfig.SET_VOICE);
                 EventBus.getDefault().post(eventMessage);
@@ -184,8 +186,10 @@
                 adapter.notifyDataSetChanged();
             }
             if (voiceBean.isDefaultMusic()) {
-                mp = MediaPlayer.create(this, Uri.parse(voiceBean.getRes()));
-                mp.start();
+                if (voiceBean.getRes() != null) {
+                    mp = MediaPlayer.create(this, Uri.parse(voiceBean.getRes()));
+                    mp.start();
+                }
             } else {
                 mp = new MediaPlayer();
                 try {
@@ -269,6 +273,7 @@
         voiceBean.setVoiceName("������");
         voiceList.add(voiceBean);
         MainApp.theApp.sharedPreferencesUtil.saveVideoList(FastJsonTools.toJson(voiceList));
+        MainApp.theApp.sharedPreferencesUtil.saveVoiceType(oldType);
         adapter.notifyDataSetChanged();
         EventMessage eventMessage = new EventMessage();
         eventMessage.setType(AppConfig.SET_VOICE);
diff --git a/app/src/main/java/com/moral/yunfushao/adapter/BleDeviceAdapter.java b/app/src/main/java/com/moral/yunfushao/adapter/BleDeviceAdapter.java
index 23260e7..9a925b2 100644
--- a/app/src/main/java/com/moral/yunfushao/adapter/BleDeviceAdapter.java
+++ b/app/src/main/java/com/moral/yunfushao/adapter/BleDeviceAdapter.java
@@ -15,7 +15,6 @@
 /**
  * Created by haijiang on 2017/7/6.
  */
-
 public class BleDeviceAdapter extends CommonAdapter<ScanResult> {
     public BleDeviceAdapter(RecyclerView v, int layoutId, List<ScanResult> datas) {
         super(v, layoutId, datas);
diff --git a/app/src/main/java/com/moral/yunfushao/ble/BLECommon.java b/app/src/main/java/com/moral/yunfushao/ble/BLECommon.java
index 4626073..efb4048 100644
--- a/app/src/main/java/com/moral/yunfushao/ble/BLECommon.java
+++ b/app/src/main/java/com/moral/yunfushao/ble/BLECommon.java
@@ -10,7 +10,8 @@
     public final static String USR_SERVICE = "0003cdd0-0000-1000-8000-00805f9b0131";
     public final static String BLE_SEARCH = "6A09010002006B";
     public final static String BLE_CLEAR = "6A09010001006B";
-    public final static String BLE_HEART =  "6A09010005006B";//������3���������������
+    public final static String BLE_HEART =  "6A070100050D6B";//������3���������������
+    //0x6A	0x07	0x01	0x00	0x05	0x0d	0x6B
     public final static String BLE_HOUR_REC =  "7A7B";//������3���������������
 
     //���������7A������������������������������������������������������
diff --git a/app/src/main/java/com/moral/yunfushao/ble/BluetoothService.java b/app/src/main/java/com/moral/yunfushao/ble/BluetoothService.java
index 81f7872..de3d4bc 100644
--- a/app/src/main/java/com/moral/yunfushao/ble/BluetoothService.java
+++ b/app/src/main/java/com/moral/yunfushao/ble/BluetoothService.java
@@ -154,6 +154,12 @@
             mCallback.onConnecting();
         }
 
+        System.out.println("chenqi blename old = "+ MainApp.theApp.sharedPreferencesUtil.getBLE());
+
+        System.out.println("chenqi blename = "+ scanResult.getDevice().getAddress());
+
+        openBlueTooth();
+
         bleManager.connectDevice(scanResult, false, new BleGattCallback() {
 
             @Override
@@ -561,6 +567,8 @@
             mCallback.onStartScan();
         }
 
+        openBlueTooth();
+
         bleManager.scanMacAndConnect(mac, 5000, false, new BleGattCallback() {
             @Override
             public void onFoundDevice(ScanResult scanResult) {
@@ -590,6 +598,7 @@
 
             @Override
             public void onConnectError(BleException exception) {
+                System.out.println("chenqi chenqi" + exception.getDescription()) ;
                 runOnMainThread(new Runnable() {
                     @Override
                     public void run() {
@@ -731,5 +740,9 @@
         }
     }
 
-
+    public void openBlueTooth() {
+        if (bleManager != null) {
+            bleManager.enableBluetooth();
+        }
+    }
 }
diff --git a/app/src/main/java/com/moral/yunfushao/fragment/FragmentMonitor.java b/app/src/main/java/com/moral/yunfushao/fragment/FragmentMonitor.java
index e6c34c2..c4c4445 100644
--- a/app/src/main/java/com/moral/yunfushao/fragment/FragmentMonitor.java
+++ b/app/src/main/java/com/moral/yunfushao/fragment/FragmentMonitor.java
@@ -2,7 +2,6 @@
 
 import android.animation.Animator;
 import android.animation.ObjectAnimator;
-import android.annotation.SuppressLint;
 import android.bluetooth.BluetoothGatt;
 import android.bluetooth.BluetoothGattCharacteristic;
 import android.bluetooth.BluetoothGattService;
@@ -13,7 +12,6 @@
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
-import android.os.Message;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.text.TextUtils;
@@ -75,6 +73,7 @@
  */
 
 public class FragmentMonitor extends BaseFragment {
+    private String TGA = getClass().getSimpleName();
     /**
      * ������������
      */
@@ -96,39 +95,65 @@
 
     //������������������������
     private ArrayList<RecData> submitTempResult = new ArrayList<>();
-    private Timer heartTimer, resTimer, chonglianTimer;
 
+    //������������
+    private int HEARTTIMES = 2;
+    //������������
+    private int RECONNECTTIMES = 8000;
+    //handler������������
     private Handler handler = new Handler();
 
-    private Runnable runnable = new Runnable() {
+
+    private Runnable heartRunnable = new Runnable() {
         @Override
         public void run() {
-            checkTime();
-            checkTimeCount++;
-            handler.postDelayed(this, 5000);
+            if (MainApp.theApp.bleManager == null) {
+                return;
+            }
+            if (!MainApp.theApp.bleManager.isConnectingOrConnected()) {
+                return;
+            }
+            //������������
+            if (FragmentMonitor.this.mBluetoothService == null) {
+                return;
+            }
+            if (FragmentMonitor.this.mBluetoothService.getWirteCharacteristic() == null) {
+                return;
+            }
+            if (FragmentMonitor.this.mBluetoothService.getWirteCharacteristic().getService() == null) {
+                return;
+            }
+            FragmentMonitor.this.mBluetoothService.write(FragmentMonitor.this.mBluetoothService.getWirteCharacteristic().getService().getUuid().toString(),
+                    FragmentMonitor.this.mBluetoothService.getWirteCharacteristic().getUuid().toString(),
+                    BLECommon.BLE_HEART, null);
+            Log.d(TGA, "������������");
+            heart();
+        }
+    };
+    private Runnable reconnectRunnable = new Runnable() {
+        @Override
+        public void run() {
+            //������
+            if (FragmentMonitor.this.mBluetoothService == null) {
+                return;
+            }
+            String mac = MainApp.theApp.sharedPreferencesUtil.getBLE();
+            if (!TextUtils.isEmpty(mac) && MainApp.theApp.bleManager.isBlueEnable()) {
+                if (MainApp.theApp.bleManager.isConnectingOrConnected()) {
+                    return;
+                }
+                Log.d(TGA, "������������");
+                FragmentMonitor.this.mBluetoothService.scanAndConnect5(mac);
+            }
+            reconnect();
         }
     };
 
-    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;
-
-            if (result.length() > 14) {
-                result = result.substring(14);
-                doHandleData(result);
-            }
-        }
-
         if (result.startsWith("3A")) {
             if (result.length() >= 16) {
                 DebugUtils.sendData("data", result);
@@ -171,12 +196,8 @@
      */
     @Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
     public void eventComing(EventMessage msg) {
-        System.out.println("chenqi msge -> " + msg.getType());
         if (msg.getType() == AppConfig.GET_BLE_SERVICE) {
-            if (chonglianTimer != null) {
-                chonglianTimer.cancel();
-                chonglianTimer = null;
-            }
+            resetHandler();
             pv.setStatusStr("���������");
             //������������
             mBluetoothService = ((MainActivity) getActivity()).getBluetoothService();
@@ -203,7 +224,6 @@
                             mBluetoothService.setCharacteristic(characteristic);
                         }
                     }
-
                 }
 
                 /**
@@ -221,43 +241,30 @@
                                         String result = StringUtils.byteArrayToHexStr(characteristic.getValue());
                                         stringResult.append(result);
                                         doHandleData(result);
-
                                         stringResult = new StringBuilder();
                                     }
                                 });
+                                HEARTTIMES = 30;
                             }
 
                             @Override
                             public void onFailure(final BleException exception) {
-
                             }
 
                             @Override
                             public void onInitiatedResult(boolean result) {
-
                             }
                         });
                 /**
                  * ������������������
                  */
-                handler.postDelayed(runnable, 5000);
-
-                /**
-                 * ������������������������
-                 */
-                if (mBluetoothService == null) {
-                    return;
-                }
-                if (mBluetoothService.getWirteCharacteristic() == null) {
-                    return;
-                }
-                mBluetoothService.write(mBluetoothService.getWirteCharacteristic().getService().getUuid().toString(), mBluetoothService.getWirteCharacteristic().getUuid().toString(), BLECommon.BLE_HEART, null);
+//                handler.postDelayed(runnable, 5000);
                 heart();
             }
         } else if (msg.getType() == AppConfig.GET_BLE_DISCONNECT) {
             preLevel = -1;
             showStatus(-1);
-            chonglian();
+            handler.postDelayed(reconnectRunnable, RECONNECTTIMES);
             stop();
             isVirating = false;
             AudioUtils.virateCancle(getActivity());
@@ -336,21 +343,20 @@
     }
 
     @Override
+    public void onResume() {
+        super.onResume();
+        textShowMac();
+    }
+
+    @Override
     public void onDestroy() {
         super.onDestroy();
         EventBus.getDefault().unregister(this);
-        if (heartTimer != null) {
-            heartTimer.cancel();
-            heartTimer = null;
-        }
         if (timer != null) {
             timer.cancel();
             timer = null;
         }
-        if (chonglianTimer != null) {
-            chonglianTimer.cancel();
-            chonglianTimer = null;
-        }
+        handler.removeCallbacksAndMessages(null);
         stop();
         isVirating = false;
         AudioUtils.virateCancle(getActivity());
@@ -492,79 +498,18 @@
         }, 0, submitTime * 1000);
     }
 
-    /**
-     * ���������������������3������
-     */
-    @SuppressLint("HandlerLeak")
-    Handler heartHandler = new Handler() {
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case 1:
-                    if (MainApp.theApp.bleManager == null) {
-                        return;
-                    }
-                    if (!MainApp.theApp.bleManager.isConnectingOrConnected()) {
-                        return;
-                    }
-                    //������������
-                    if (FragmentMonitor.this.mBluetoothService == null) {
-                        return;
-                    }
-                    if (FragmentMonitor.this.mBluetoothService.getWirteCharacteristic() == null) {
-                        return;
-                    }
-                    if (FragmentMonitor.this.mBluetoothService.getWirteCharacteristic().getService() == null) {
-                        return;
-                    }
-                    FragmentMonitor.this.mBluetoothService.write(FragmentMonitor.this.mBluetoothService.getWirteCharacteristic().getService().getUuid().toString(), FragmentMonitor.this.mBluetoothService.getWirteCharacteristic().getUuid().toString(), BLECommon.BLE_HEART, null);
-                    Log.d("xintiao", "������������");
-                    break;
-                case 2:
-                    //������
-                    if (FragmentMonitor.this.mBluetoothService == null) {
-                        return;
-                    }
-                    String mac = MainApp.theApp.sharedPreferencesUtil.getBLE();
-                    if (!TextUtils.isEmpty(mac) && MainApp.theApp.bleManager.isBlueEnable()) {
-                        if (MainApp.theApp.bleManager.isConnectingOrConnected()) {
-                            return;
-                        }
-                        Log.d("chonglian", "������������");
-                        FragmentMonitor.this.mBluetoothService.scanAndConnect5(mac);
-                    }
-                    break;
-            }
-            super.handleMessage(msg);
-        }
-
-    };
-
     private void heart() {
-        if (heartTimer == null) {
-            heartTimer = new Timer();
-            heartTimer.schedule(new TimerTask() {
-                @Override
-                public void run() {
-                    Message message = new Message();
-                    message.what = 1;
-                    heartHandler.sendMessage(message);
-                }
-            }, 0, 1000 * 30);
-        }
+        handler.postDelayed(heartRunnable, 1000 * HEARTTIMES);
     }
 
-    private void chonglian() {
-        if (chonglianTimer == null) {
-            chonglianTimer = new Timer();
-            chonglianTimer.schedule(new TimerTask() {
-                @Override
-                public void run() {
-                    Message message = new Message();
-                    message.what = 2;
-                    heartHandler.sendMessage(message);
-                }
-            }, 0, 1000 * 8);
-        }
+    private void reconnect() {
+        handler.postDelayed(reconnectRunnable, RECONNECTTIMES);
+    }
+
+    private void resetHandler() {
+        handler.removeCallbacks(reconnectRunnable);
+        handler.removeCallbacks(heartRunnable);
+        HEARTTIMES = 2;
     }
 
     private void submitData() {
@@ -608,6 +553,7 @@
     private void showStatus(int level) {
         int yanzhang = R.mipmap.icon_yanzhong;
         int danger = R.mipmap.icon_danger;
+        iv_dianliang.setVisibility(View.VISIBLE);
         if (type == 1) {
             //������
             yanzhang = R.mipmap.icon_yanzhong;
@@ -661,6 +607,7 @@
             tv_status.setTextColor(getResources().getColor(R.color.red_txt));
             ll_status.setBackgroundResource(R.mipmap.bg_conner_red);
         } else if (level == -1) {
+            iv_dianliang.setVisibility(View.GONE);
             tv_tishi.setText("������������������");
             tv_tishi.setBackgroundResource(R.mipmap.bt_offline);
             iv_bottom_status.setImageResource(R.mipmap.icon_offline);
@@ -682,9 +629,29 @@
             tv_status.setText("���������");
             ll_status.setBackgroundResource(R.mipmap.bg_corner_gray);
             pv.setPercent(0);
-            pv.setStatusStr("���������");
+            pv.setStatusStr("���������");
             tv_ljjl.setText("0");
             tv_shishi.setText("0");
+        }
+    }
+
+    private void textShowMac() {
+        if (BuildConfig.BUILD_TYPE.equals(VersionConstants.DEBUG)) {
+            final TextView tv_text_mac = (TextView) findView(R.id.tv_text_mac);
+            tv_desc.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    tv_text_mac.setText("Mac: " + MainApp.theApp.sharedPreferencesUtil.getBLE());
+                    FlipAnimatorXViewShow(tv_desc, tv_text_mac, 100L);
+                }
+            });
+
+            tv_text_mac.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    FlipAnimatorXViewShow(tv_text_mac, tv_desc, 100L);
+                }
+            });
         }
     }
 
@@ -776,13 +743,13 @@
         }
     }
 
+
     /**
      * 7A������������������
      * 7A0024010002D8B04CE90E6300000003000003EE0000000000000EC6000000000017347B0D0A
      * ������������������
      */
     private void parseHoutData(String nowResult) {
-        System.out.println("chenqi elec parseHoutData" + nowResult);
         if (TextUtils.isEmpty(nowResult)) {
             return;
         }
@@ -791,13 +758,11 @@
         if (strings[0].startsWith("7A") && strings[35].endsWith("7B")) {
             String realString = StringUtils.subStrings(strings, 21, 23);
             int electric_field = Integer.parseInt(realString, 16);
-            int b1 = Integer.parseInt(strings[24], 16);
-            int b2 = Integer.parseInt(strings[25], 16);
-            int baojing = Integer.parseInt(strings[29], 16);
-            int elec = Integer.parseInt(StringUtils.subStrings(strings, 13, 15));
-//            T.show("bl = " + strings[24] + " -- b2 = " + strings[25]);
-//
-//            System.out.println("bl = " + b1 + " -- b2 = " + b2);
+            int b1 = Integer.parseInt(strings[24].trim(), 16);
+            int b2 = Integer.parseInt(strings[25].trim(), 16);
+            int baojing = Integer.parseInt(strings[29].trim(), 16);
+
+            double elec = Integer.parseInt(StringUtils.subStrings(strings, 13, 15), 16);
 
             double electricFieldValue = (electric_field) / 100.0;
             double elecValue = (elec) / 100.0;
@@ -869,13 +834,11 @@
                     AudioUtils.vibrate(getActivity(), new long[]{1000, 1000, 1000, 1000}, 0);
                 }
             }
-            System.out.println("chenqi elec B-- " + b2);
             /**
              * ������������
              */
             showPower(b1, b2);
             submitResult.add(data);
-            //            realResult.clear();
         }
     }
 
@@ -985,6 +948,11 @@
         }
     }
 
+    /**
+     * ������������������
+     *
+     * @param level
+     */
     public void play(int level) {
         Log.d("music", "preLevel:" + preLevel + "----level:" + level);
         if (preLevel == level) {
@@ -996,9 +964,11 @@
         }
         VoiceBean voiceBean = voiceList.get(level);
         if (voiceBean.isDefaultMusic()) {
-            mp = MediaPlayer.create(getActivity(), Uri.parse(voiceBean.getRes()));
-            mp.start();
-            mp.setLooping(true);
+            if (voiceBean.getRes() != null) {
+                mp = MediaPlayer.create(getActivity(), Uri.parse(voiceBean.getRes()));
+                mp.start();
+                mp.setLooping(true);
+            }
         } else {
             mp = new MediaPlayer();
             try {
diff --git a/app/src/main/java/com/moral/yunfushao/fragment/FragmentSettings.java b/app/src/main/java/com/moral/yunfushao/fragment/FragmentSettings.java
index 585a957..40922d2 100644
--- a/app/src/main/java/com/moral/yunfushao/fragment/FragmentSettings.java
+++ b/app/src/main/java/com/moral/yunfushao/fragment/FragmentSettings.java
@@ -1,12 +1,16 @@
 package com.moral.yunfushao.fragment;
 
+import android.app.AlertDialog;
+import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.support.v7.widget.SwitchCompat;
 import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
 import android.widget.Button;
-import android.widget.CompoundButton;
+import android.widget.ListView;
 import android.widget.RelativeLayout;
 import android.widget.TextView;
 
@@ -27,7 +31,6 @@
 import com.moral.yunfushao.httputils.HttpUtils;
 import com.moral.yunfushao.model.EventMessage;
 import com.moral.yunfushao.model.VoiceBean;
-import com.moral.yunfushao.utils.DebugUtils;
 
 import org.greenrobot.eventbus.EventBus;
 
@@ -42,11 +45,12 @@
 
 public class FragmentSettings extends BaseFragment {
     private TextView tv_version;
-    private RelativeLayout rl_setvoice,rl_refresh;
+    private RelativeLayout rl_setvoice, rl_refresh;
     private Button bt_sure;
-    private Button bt_look;
-    private SwitchCompat sc_open,sc_male;
-    private int refreshIndex=0;
+    private Button bt_look, sc_male;
+    private SwitchCompat sc_open;
+    private int refreshIndex = 0;
+
     @Override
     protected int getLayoutId() {
         return R.layout.fragment_setting_layout;
@@ -61,17 +65,11 @@
         sc_open = findView(R.id.sc_open);
         sc_male = findView(R.id.sc_male);
         tv_version = findView(R.id.tv_version);
-        tv_version.setText("������������V"+getVersion());
+        tv_version.setText("������������V" + getVersion());
+
 
 //        bt_look.setVisibility(DebugUtils.debug_mode ? View.VISIBLE : View.GONE);
         bt_look.setVisibility(View.GONE);
-        if (MainApp.theApp.sharedPreferencesUtil.getVoiceType() == 0) {
-            sc_male.setChecked(false);
-            sc_male.setText("���");
-        }else{
-            sc_male.setChecked(true);
-            sc_male.setText("���");
-        }
     }
 
     @Override
@@ -82,40 +80,123 @@
         sc_open.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
-                if(sc_open.isChecked()){
-                    update("is_open_upload","1");
-                }else{
-                    update("is_open_upload","0");
+                if (sc_open.isChecked()) {
+                    update("is_open_upload", "1");
+                } else {
+                    update("is_open_upload", "0");
                 }
             }
         });
-        sc_male.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+
+        sc_male.setOnClickListener(new View.OnClickListener() {
             @Override
-            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
-                if(b){
-                    sc_male.setText("���");
-                    MainApp.theApp.sharedPreferencesUtil.saveVoiceType(1);
-                    AppConfig.voideUrl1 = "http://yfsapi.7drlb.com/video/girl/music.mp3";
-                    AppConfig.voideUrl2 = "http://yfsapi.7drlb.com/video/girl/music1.mp3";
-                    AppConfig.voideUrl3 = "http://yfsapi.7drlb.com/video/girl/music2.mp3";
-                }else{
-                    sc_male.setText("���");
-                    MainApp.theApp.sharedPreferencesUtil.saveVoiceType(0);
-                    AppConfig.voideUrl1 = "http://yfsapi.7drlb.com/video/boy/music.mp3";
-                    AppConfig.voideUrl2 = "http://yfsapi.7drlb.com/video/boy/music1.mp3";
-                    AppConfig.voideUrl3 = "http://yfsapi.7drlb.com/video/boy/music2.mp3";
-                }
-                reset();
+            public void onClick(View v) {
+                chooseSoundCategory();
             }
         });
 
         bt_look.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
-                  Intent intent = new Intent(getActivity(), TestActivity.class);
-                  startActivity(intent);
+                Intent intent = new Intent(getActivity(), TestActivity.class);
+                startActivity(intent);
             }
         });
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        switch (MainApp.theApp.sharedPreferencesUtil.getVoiceType()) {
+            case 0:
+                sc_male.setText("������");
+                break;
+            case 1:
+                sc_male.setText("������");
+                break;
+            case 2:
+                sc_male.setText("������");
+                break;
+            case 3:
+                sc_male.setText("���������");
+                break;
+        }
+    }
+
+    /**
+     * ���������������������
+     */
+    private void chooseSoundCategory() {
+        final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+        ListView listView = new ListView(getActivity());
+        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(getActivity(),
+                android.R.layout.simple_expandable_list_item_1,
+                new String[]{"������", "������", "������"});
+        listView.setAdapter(arrayAdapter);
+        builder.setTitle("������������������!");
+        builder.setIcon(R.mipmap.icon_voice);
+        builder.setView(listView);
+        final AlertDialog alertDialog = builder.create();
+        alertDialog.show();
+        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+            @Override
+            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+                alertDialog.dismiss();
+                ejectTips(position);
+            }
+        });
+    }
+
+    /**
+     * ���������������������
+     */
+    private void ejectTips(final int position) {
+        final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+        builder.setTitle("���������������");
+        builder.setIcon(R.mipmap.tips);
+        builder.setMessage("������������������������������������������������������������������������");
+        builder.setNegativeButton("������", new DialogInterface.OnClickListener() {
+            @Override
+            public void onClick(DialogInterface dialog, int which) {
+                dialog.dismiss();
+                setUpDefaultRingtone(position);
+            }
+        });
+        builder.setPositiveButton("������", new DialogInterface.OnClickListener() {
+            @Override
+            public void onClick(DialogInterface dialog, int which) {
+                dialog.dismiss();
+            }
+        });
+        final AlertDialog alertDialog = builder.create();
+        alertDialog.show();
+    }
+
+    private void setUpDefaultRingtone(int type) {
+        switch (type) {
+            case 0:
+                sc_male.setText("������");
+                MainApp.theApp.sharedPreferencesUtil.saveVoiceType(0);
+                AppConfig.voideUrl1 = "http://yfsapi.7drlb.com/video/boy/music.mp3";
+                AppConfig.voideUrl2 = "http://yfsapi.7drlb.com/video/boy/music1.mp3";
+                AppConfig.voideUrl3 = "http://yfsapi.7drlb.com/video/boy/music2.mp3";
+                break;
+            case 1:
+                sc_male.setText("������");
+                MainApp.theApp.sharedPreferencesUtil.saveVoiceType(1);
+                AppConfig.voideUrl1 = "http://yfsapi.7drlb.com/video/girl/music.mp3";
+                AppConfig.voideUrl2 = "http://yfsapi.7drlb.com/video/girl/music1.mp3";
+                AppConfig.voideUrl3 = "http://yfsapi.7drlb.com/video/girl/music2.mp3";
+                break;
+            case 2:
+                sc_male.setText("������");
+                MainApp.theApp.sharedPreferencesUtil.saveVoiceType(2);
+                AppConfig.voideUrl1 = null;
+                AppConfig.voideUrl2 = null;
+                AppConfig.voideUrl3 = null;
+                break;
+        }
+        reset();
     }
 
     @Override
@@ -124,17 +205,17 @@
         timeList.add("20s");
         timeList.add("30s");
         int open = MainApp.theApp.sharedPreferencesUtil.getLoginInfo().getIs_open_upload();
-        if(open == 0){
+        if (open == 0) {
             sc_open.setChecked(false);
-        }else{
+        } else {
             sc_open.setChecked(true);
         }
         int refresh = MainApp.theApp.sharedPreferencesUtil.getLoginInfo().getRefresh_frequency();
-        if(refresh == 10){
+        if (refresh == 10) {
             refreshIndex = 0;
-        }else if(refresh == 20){
+        } else if (refresh == 20) {
             refreshIndex = 1;
-        }else if(refresh == 30){
+        } else if (refresh == 30) {
             refreshIndex = 2;
         }
     }
@@ -172,7 +253,7 @@
             @Override
             public void onOptionsSelect(int options1, int options2, int options3, View v) {
                 refreshIndex = options1;
-                update("refresh_frequency",(options1+1)*10+"");
+                update("refresh_frequency", (options1 + 1) * 10 + "");
             }
         }).setOutSideCancelable(true).build();
         sexView.setSelectOptions(refreshIndex);
@@ -182,6 +263,7 @@
 
     /**
      * ������������������������������������['refresh_frequency', 'video', 'is_open_upload']
+     *
      * @param field
      * @param value
      */
@@ -195,9 +277,9 @@
             @Override
             public void onSuccess(String res, String msg) {
                 mToatUtils.showSingletonToast(msg);
-                if("refresh_frequency".equals(field)){
+                if ("refresh_frequency".equals(field)) {
                     MainApp.theApp.sharedPreferencesUtil.setRefreh(Integer.parseInt(value));
-                }else if("is_open_upload".equals(field)){
+                } else if ("is_open_upload".equals(field)) {
                     MainApp.theApp.sharedPreferencesUtil.setUpload(Integer.parseInt(value));
                 }
                 EventMessage event = new EventMessage();
@@ -215,7 +297,7 @@
             }
 
             @Override
-            public void onFail(int errno,String s) {
+            public void onFail(int errno, String s) {
                 mToatUtils.showSingletonToast(s);
                 if (progressDialog.isShowing()) {
                     progressDialog.dismiss();
@@ -226,6 +308,7 @@
 
     /**
      * ���������������
+     *
      * @return ������������������������
      */
     public String getVersion() {
@@ -241,6 +324,7 @@
     }
 
     private ArrayList<VoiceBean> voiceList = new ArrayList<>();
+
     private void reset() {
         voiceList.clear();
         VoiceBean voiceBean = new VoiceBean();
@@ -265,5 +349,6 @@
         EventMessage eventMessage = new EventMessage();
         eventMessage.setType(AppConfig.SET_VOICE);
         EventBus.getDefault().post(eventMessage);
+        mToatUtils.showSingleLongToast("������������������");
     }
 }
diff --git a/app/src/main/java/com/moral/yunfushao/ui/PanelView.java b/app/src/main/java/com/moral/yunfushao/ui/PanelView.java
index c712411..29056eb 100644
--- a/app/src/main/java/com/moral/yunfushao/ui/PanelView.java
+++ b/app/src/main/java/com/moral/yunfushao/ui/PanelView.java
@@ -60,7 +60,7 @@
     private Paint drawTextPaint;
     private int textColor = Color.GRAY;
     private int textSize = 36;
-    private String[] level = {"������������", "������������", "������������", "������������"};
+    private String[] level = {"������", "������������", "������������", "������������"};
 
     //������������
     private Paint mCirclePaint;
@@ -225,8 +225,6 @@
         float bitH = circleR;
         float bitW = bitH * 0.448f;
         canvas.save();
-
-        System.out.println("chenqi percent connect" + percent);
         canvas.rotate(percent * 300 - 150, mWidth / 2, mWidth / 2);
         RectF btmRect = new RectF((float) (cirlcleRect.left + bitH - bitW * 0.535), (float) (cirlcleRect.top + mCircleWidth * 0.68), (float) (cirlcleRect.left + bitH + bitW * 0.465), (float) (cirlcleRect.top + bitH + mCircleWidth * 0.68));
 //        Log.d("haijiang","left="+btmRect.left);
diff --git a/app/src/main/java/com/moral/yunfushao/utils/PermissionUtil.java b/app/src/main/java/com/moral/yunfushao/utils/PermissionUtil.java
new file mode 100644
index 0000000..9aff451
--- /dev/null
+++ b/app/src/main/java/com/moral/yunfushao/utils/PermissionUtil.java
@@ -0,0 +1,37 @@
+package com.moral.yunfushao.utils;
+
+import android.app.Activity;
+import android.content.pm.PackageManager;
+import android.os.Build;
+import android.support.v4.app.ActivityCompat;
+
+/**
+ * @author : chenqi.
+ * @e_mail : 1650699704@163.com.
+ * @create_time : 2018/11/5.
+ * @Package_name: pregnancy_guard_android
+ */
+public class PermissionUtil {
+    private static final int REQUEST_EXTERNAL_STORAGE = 1;
+    private static String[] PERMISSIONS_STORAGE = {
+            "android.permission.READ_EXTERNAL_STORAGE",
+            "android.permission.WRITE_EXTERNAL_STORAGE"};
+
+
+    public static void verifyStoragePermissions(Activity activity) {
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
+            return;
+        }
+        try {
+            //���������������������������
+            int permission = ActivityCompat.checkSelfPermission(activity,
+                    "android.permission.WRITE_EXTERNAL_STORAGE");
+            if (permission != PackageManager.PERMISSION_GRANTED) {
+                // ���������������������������������������������������������������
+                ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/app/src/main/res/anim/progress.xml b/app/src/main/res/anim/progress.xml
new file mode 100644
index 0000000..bdcc398
--- /dev/null
+++ b/app/src/main/res/anim/progress.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <rotate
+        android:interpolator="@android:anim/linear_interpolator"
+        android:pivotX="50%"
+        android:pivotY="50%"
+        android:fromDegrees="0"
+        android:toDegrees="+360"
+        android:duration="1500"
+        android:startOffset="-1"
+        android:repeatMode="restart"
+        android:repeatCount="-1"/>
+</set>
\ No newline at end of file
diff --git a/app/src/main/res/layout/ac_ble_search_layout.xml b/app/src/main/res/layout/ac_ble_search_layout.xml
index eba5f42..dc5a497 100644
--- a/app/src/main/res/layout/ac_ble_search_layout.xml
+++ b/app/src/main/res/layout/ac_ble_search_layout.xml
@@ -16,18 +16,20 @@
         android:padding="@dimen/x16">
 
         <ImageView
-            android:id="@+id/iv_searchpic"
-            android:layout_width="@dimen/x140"
-            android:layout_height="@dimen/x140"
-            android:scaleType="centerCrop"
-            android:src="@mipmap/bg_start" />
-
-        <ImageView
             android:id="@+id/iv_search"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginTop="@dimen/x8"
-            android:src="@mipmap/bt_start" />
+            android:layout_marginBottom="@dimen/x10"
+            android:src="@mipmap/bt_start"
+            android:visibility="visible" />
+
+        <ImageView
+            android:id="@+id/iv_searchpic"
+            android:layout_width="@dimen/x70"
+            android:layout_height="@dimen/x70"
+            android:scaleType="centerCrop"
+            android:src="@mipmap/bg_start" />
     </LinearLayout>
 
     <LinearLayout
@@ -35,74 +37,84 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="vertical">
+
         <TextView
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:padding="@dimen/x10"
-            android:textColor="@color/dark_gray_txt"
-            android:text="@string/caozuo"/>
+            android:text="@string/caozuo"
+            android:textColor="@color/dark_gray_txt" />
+
         <View
             android:layout_width="match_parent"
             android:layout_height="1dp"
             android:layout_marginLeft="@dimen/x10"
-            android:background="@color/gray_line"/>
+            android:background="@color/gray_line" />
+
         <TextView
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:padding="@dimen/x10"
-            android:drawablePadding="@dimen/x8"
             android:drawableLeft="@mipmap/icon1"
-            android:textColor="@color/dark_gray_txt"
-            android:text="@string/caozuo1"/>
+            android:drawablePadding="@dimen/x8"
+            android:padding="@dimen/x10"
+            android:text="@string/caozuo1"
+            android:textColor="@color/dark_gray_txt" />
+
         <View
             android:layout_width="match_parent"
             android:layout_height="1dp"
             android:layout_marginLeft="@dimen/x10"
-            android:background="@color/gray_line"/>
+            android:background="@color/gray_line" />
+
         <TextView
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:padding="@dimen/x10"
-            android:drawablePadding="@dimen/x8"
             android:drawableLeft="@mipmap/icon2"
-            android:textColor="@color/dark_gray_txt"
-            android:text="@string/caozuo2"/>
+            android:drawablePadding="@dimen/x8"
+            android:padding="@dimen/x10"
+            android:text="@string/caozuo2"
+            android:textColor="@color/dark_gray_txt" />
+
         <View
             android:layout_width="match_parent"
             android:layout_height="1dp"
             android:layout_marginLeft="@dimen/x10"
-            android:background="@color/gray_line"/>
+            android:background="@color/gray_line" />
+
         <TextView
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:padding="@dimen/x10"
-            android:drawablePadding="@dimen/x8"
             android:drawableLeft="@mipmap/icon3"
-            android:textColor="@color/dark_gray_txt"
-            android:text="@string/caozuo3"/>
+            android:drawablePadding="@dimen/x8"
+            android:padding="@dimen/x10"
+            android:text="@string/caozuo3"
+            android:textColor="@color/dark_gray_txt" />
+
         <View
             android:layout_width="match_parent"
             android:layout_height="1dp"
             android:layout_marginLeft="@dimen/x10"
-            android:background="@color/gray_line"/>
+            android:background="@color/gray_line" />
+
         <TextView
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:padding="@dimen/x10"
-            android:drawablePadding="@dimen/x8"
             android:drawableLeft="@mipmap/icon4"
-            android:textColor="@color/dark_gray_txt"
-            android:text="@string/caozuo4"/>
+            android:drawablePadding="@dimen/x8"
+            android:padding="@dimen/x10"
+            android:text="@string/caozuo4"
+            android:textColor="@color/dark_gray_txt" />
+
         <View
             android:layout_width="match_parent"
             android:layout_height="1dp"
             android:layout_marginLeft="@dimen/x10"
-            android:background="@color/gray_line"/>
+            android:background="@color/gray_line" />
     </LinearLayout>
 
     <android.support.v7.widget.RecyclerView
         android:id="@+id/rv_ble"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:visibility="gone"/>
+        android:visibility="gone" />
 </LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_monitor_layout.xml b/app/src/main/res/layout/fragment_monitor_layout.xml
index ca35289..653352c 100644
--- a/app/src/main/res/layout/fragment_monitor_layout.xml
+++ b/app/src/main/res/layout/fragment_monitor_layout.xml
@@ -199,6 +199,17 @@
                         android:orientation="vertical">
 
                         <TextView
+                            android:id="@+id/tv_text_mac"
+                            android:layout_width="match_parent"
+                            android:layout_height="match_parent"
+                            android:layout_marginTop="@dimen/x15"
+                            android:background="@color/white"
+                            android:gravity="center"
+                            android:padding="@dimen/x15"
+                            android:text="���������,���mac���"
+                            android:textColor="#ae8082" />
+
+                        <TextView
                             android:id="@+id/tv_desc"
                             android:layout_width="match_parent"
                             android:layout_height="match_parent"
@@ -209,6 +220,7 @@
                             android:text="���������������������������\n������������������������������������������������"
                             android:textColor="#ae8082" />
 
+
                         <ImageView
                             android:id="@+id/iv_bottom_status"
                             android:layout_width="@dimen/x30"
diff --git a/app/src/main/res/layout/fragment_setting_layout.xml b/app/src/main/res/layout/fragment_setting_layout.xml
index deb61da..65f653e 100644
--- a/app/src/main/res/layout/fragment_setting_layout.xml
+++ b/app/src/main/res/layout/fragment_setting_layout.xml
@@ -43,17 +43,19 @@
         <TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:text="������������"
             android:layout_alignParentRight="true"
-            android:textColor="@color/dark_gray_txt"
             android:drawableRight="@mipmap/icon_jiantou"
             android:drawablePadding="@dimen/x6"
+            android:text="������������"
+            android:textColor="@color/dark_gray_txt"
             android:textSize="16sp" />
     </RelativeLayout>
+
     <View
         android:layout_width="match_parent"
         android:layout_height="1dp"
-        android:background="@color/gray_line"/>
+        android:background="@color/gray_line" />
+
     <RelativeLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
@@ -79,12 +81,14 @@
             android:id="@+id/sc_open"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_alignParentRight="true"/>
+            android:layout_alignParentRight="true" />
     </RelativeLayout>
+
     <View
         android:layout_width="match_parent"
         android:layout_height="1dp"
-        android:background="@color/gray_line"/>
+        android:background="@color/gray_line" />
+
     <RelativeLayout
         android:id="@+id/rl_setvoice"
         android:layout_width="match_parent"
@@ -103,33 +107,39 @@
             android:layout_height="wrap_content"
             android:layout_marginLeft="@dimen/x10"
             android:layout_toRightOf="@+id/iv3"
-            android:text="������������"
-            android:textColor="@color/dark_gray_txt"
             android:drawableRight="@mipmap/icon_jiantou"
+            android:text="���������������������"
+            android:textColor="@color/dark_gray_txt"
             android:textSize="16sp" />
-        <android.support.v7.widget.SwitchCompat
+
+        <Button
             android:id="@+id/sc_male"
             android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginRight="@dimen/x20"
-            android:text="���"
+            android:layout_height="@dimen/x30"
+            android:layout_alignParentRight="true"
             android:layout_centerVertical="true"
-            android:layout_alignParentRight="true"/>
+            android:layout_marginRight="@dimen/x20"
+            android:background="@drawable/choose_button"
+            android:stateListAnimator="@anim/progress"
+            android:textColor="@color/dark_gray_txt"
+            android:text="������" />
     </RelativeLayout>
+
     <View
         android:layout_width="match_parent"
         android:layout_height="1dp"
-        android:background="@color/gray_line"/>
+        android:background="@color/gray_line" />
+
     <Button
         android:id="@+id/bt_sure"
         android:layout_width="match_parent"
         android:layout_height="@dimen/x40"
         android:layout_marginLeft="@dimen/x40"
-        android:layout_marginRight="@dimen/x40"
         android:layout_marginTop="@dimen/x24"
+        android:layout_marginRight="@dimen/x40"
         android:background="@mipmap/bt_blue"
-        android:text="������������"
         android:gravity="center"
+        android:text="������������"
         android:textColor="@color/white"
         android:textSize="16sp" />
 
@@ -138,20 +148,21 @@
         android:layout_width="match_parent"
         android:layout_height="@dimen/x40"
         android:layout_marginLeft="@dimen/x40"
-        android:layout_marginRight="@dimen/x40"
         android:layout_marginTop="@dimen/x24"
+        android:layout_marginRight="@dimen/x40"
         android:background="@mipmap/bt_blue"
-        android:text="������������"
-        android:visibility="gone"
         android:gravity="center"
+        android:text="������������"
         android:textColor="@color/white"
-        android:textSize="16sp" />
+        android:textSize="16sp"
+        android:visibility="gone" />
+
     <TextView
         android:id="@+id/tv_version"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:gravity="center_horizontal|bottom"
         android:layout_marginBottom="30dp"
+        android:gravity="center_horizontal|bottom"
         android:text="������������V1.0"
         android:textColor="@color/dark_gray_txt"
         android:textSize="18sp" />
diff --git a/app/src/main/res/mipmap-hdpi/tips.png b/app/src/main/res/mipmap-hdpi/tips.png
new file mode 100644
index 0000000..477c90f
--- /dev/null
+++ b/app/src/main/res/mipmap-hdpi/tips.png
Binary files differ
diff --git a/app/src/main/res/mipmap-xxhdpi/tips.png b/app/src/main/res/mipmap-xxhdpi/tips.png
new file mode 100644
index 0000000..477c90f
--- /dev/null
+++ b/app/src/main/res/mipmap-xxhdpi/tips.png
Binary files differ
diff --git a/key.jks b/key.jks
new file mode 100755
index 0000000..8190f75
--- /dev/null
+++ b/key.jks
Binary files differ

--
Gitblit v1.8.0