yy1717
2020-11-25 1baa8f7baa336ce7e78d4b8389a351526cb8c673
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);
    }
}