QT bluetooth.so集成到Android Java项目中。QAndroidJniObject和QBluetooth设备发现问题
大家好强> 我正在编写代码,以便能够使用JNI通过QT库获得android蓝牙连接。 其主要思想是有一个黑匣子连接到设备以获取数据、分析等,这就是为什么我需要使用QT Bluetooth,而不将设备数据从java代码传递到lib 所以 首先,我使用JNIEnv*env检查是否可以获得蓝牙适配器,并且它可以工作。 然后我使用QandroidjnienEnvironment,还得到了蓝牙适配器的名称。请看代码QT bluetooth.so集成到Android Java项目中。QAndroidJniObject和QBluetooth设备发现问题,java,android,qt,bluetooth,java-native-interface,Java,Android,Qt,Bluetooth,Java Native Interface,大家好 我正在编写代码,以便能够使用JNI通过QT库获得android蓝牙连接。 其主要思想是有一个黑匣子连接到设备以获取数据、分析等,这就是为什么我需要使用QT Bluetooth,而不将设备数据从java代码传递到lib 所以 首先,我使用JNIEnv*env检查是否可以获得蓝牙适配器,并且它可以工作。 然后我使用QandroidjnienEnvironment,还得到了蓝牙适配器的名称。请看代码 static jclass jniMathClassID = 0; static jm
static jclass jniMathClassID = 0;
static jmethodID jniMathConstructorMethodID = 0;
static jmethodID jniMathElevenMethodID = 0;
QAndroidJniEnvironment qjniEnv;
jclass classBta = qjniEnv->FindClass("android/bluetooth/BluetoothAdapter");
jmethodID methodIdGetAdapter =
qjniEnv->GetStaticMethodID(classBta,
"getDefaultAdapter",
"()Landroid/bluetooth/BluetoothAdapter;");
jmethodID methodIdGetName =
qjniEnv->GetMethodID(classBta,
"getName",
"()Ljava/lang/String;");
jobject objBta = (jobject) qjniEnv->CallStaticObjectMethod(classBta, methodIdGetAdapter);
jstring strName = (jstring) qjniEnv->CallObjectMethod(objBta, methodIdGetName);
const char *result = qjniEnv->GetStringUTFChars(strName, 0);
qDebug() << result;
adapter变量中没有任何内容,但是如果我在自己的方法中调用QAndroidJniObject::callStaticObjectMethod,并将“android/bluetooth/BluetoothAdapter”更改为classBta(您在上面看到的),它可以正常工作
QAndroidJniObject adapter=QAndroidJniObject::callStaticObjectMethod(
classBta,"getDefaultAdapter","()Landroid/bluetooth/BluetoothAdapter;");
看起来QAndroidJniObject工作不正确,调用了错误的方法。
你能帮我做这个吗?我真的需要让QBluetoothDeviceDiscoveryAgent工作。我只有一个猜测。当使用QT creator时,它会在android_PACKAGE_SOURCE_DIR=$$PWD/android中查找android资源。但我不使用QtCreator来创建我的Android应用程序,我只创建.so lib,然后在Android Studio中使用它来调用JNI。因此,当我将classBta对象作为对象传递(您在上面看到)时,callStaticObjectMethod工作正常,但使用类名android/bluetooth/BluetoothAdapter时,它找不到它。。。。有什么想法吗?我只有一个猜测。当使用QT creator时,它会在android_PACKAGE_SOURCE_DIR=$$PWD/android中查找android资源。但我不使用QtCreator来创建我的Android应用程序,我只创建.so lib,然后在Android Studio中使用它来调用JNI。因此,当我将classBta对象作为对象传递(您在上面看到)时,callStaticObjectMethod工作正常,但使用类名android/bluetooth/BluetoothAdapter时,它找不到它。。。。有什么想法吗?
QAndroidJniObject adapter=QAndroidJniObject::callStaticObjectMethod(
classBta,"getDefaultAdapter","()Landroid/bluetooth/BluetoothAdapter;");