From 1baa8f7baa336ce7e78d4b8389a351526cb8c673 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期三, 25 十一月 2020 15:10:39 +0800
Subject: [PATCH] 蓝牙密码

---
 lib/src/main/cpp/native-lib.cpp |   64 +++++++++++++++++++++++++++++++
 1 files changed, 63 insertions(+), 1 deletions(-)

diff --git a/lib/src/main/cpp/native-lib.cpp b/lib/src/main/cpp/native-lib.cpp
index 0c9d356..f0d0390 100644
--- a/lib/src/main/cpp/native-lib.cpp
+++ b/lib/src/main/cpp/native-lib.cpp
@@ -340,7 +340,37 @@
     jclass cls = env->GetObjectClass(sg_obj);
     jmethodID fun = env->GetMethodID(cls, "ConnectBluetooth", "(Ljava/lang/String;Ljava/lang/String;)V");
 
-    env->CallVoidMethod(sg_obj, fun, env->NewStringUTF(addr), env->NewStringUTF(pin));
+    env->CallVoidMethod(sg_obj, fun, env->NewStringUTF(addr), (pin == NULL) ? NULL : env->NewStringUTF(pin));
+
+    env->DeleteLocalRef(cls);
+
+    if (!ready_in_java_env) {
+        //Detach涓荤嚎绋�
+        if (sg_jvm->DetachCurrentThread() != JNI_OK) {
+            LOGE("%s: DetachCurrentThread() failed", __FUNCTION__);
+        }
+    }
+}
+
+void DisconnectBluetooth(void)
+{
+    JNIEnv *env;
+    bool ready_in_java_env = false;
+
+    if (sg_jvm->GetEnv((void **)&env, JNI_VERSION_1_6) != JNI_OK) {
+        // Attach涓荤嚎绋�
+        if (sg_jvm->AttachCurrentThread(&env, NULL) != JNI_OK) {
+            LOGE("%s: AttachCurrentThread() failed", __FUNCTION__);
+            return;
+        }
+    } else {
+        ready_in_java_env = true;
+    }
+
+    jclass cls = env->GetObjectClass(sg_obj);
+    jmethodID fun = env->GetMethodID(cls, "DisconnectBluetooth", "()V");
+
+    env->CallVoidMethod(sg_obj, fun);
 
     env->DeleteLocalRef(cls);
 
@@ -493,3 +523,35 @@
 
     PlatformStatusChanged(BLUETOOTH_STATUS_EVT, &sta, 1);
 }
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_com_anyun_exam_lib_RemoteService_BluetoothConnected(JNIEnv *env, jobject thiz, jstring name,
+                                                         jstring addr) {
+    // TODO: implement BluetoothConnected()
+    if (name != NULL && addr != NULL) {
+        const char *strname = env->GetStringUTFChars(name, 0);
+        const char *straddr = env->GetStringUTFChars(addr, 0);
+
+        uint8_t data[128];
+        strcpy((char *)data, strname);
+        strcpy((char *)data + 64, straddr);
+
+        env->ReleaseStringUTFChars(name, strname);
+        env->ReleaseStringUTFChars(addr, straddr);
+
+        PlatformStatusChanged(BLUETOOTH_STATUS_EVT, data, 128);
+    } else if (addr != NULL) {
+        const char *straddr = env->GetStringUTFChars(addr, 0);
+
+        uint8_t data[64];
+        strcpy((char *)data, straddr);
+
+        env->ReleaseStringUTFChars(addr, straddr);
+
+        PlatformStatusChanged(BLUETOOTH_STATUS_EVT, data, 64);
+    } else {
+        uint8_t sta = 3;
+        PlatformStatusChanged(BLUETOOTH_STATUS_EVT, &sta, 1);
+    }
+}

--
Gitblit v1.8.0