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