QT bluetooth.so集成到Android Java项目中。QAndroidJniObject和QBluetooth设备发现问题

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

大家好

我正在编写代码,以便能够使用JNI通过QT库获得android蓝牙连接。 其主要思想是有一个黑匣子连接到设备以获取数据、分析等,这就是为什么我需要使用QT Bluetooth,而不将设备数据从java代码传递到lib

所以

首先,我使用JNIEnv*env检查是否可以获得蓝牙适配器,并且它可以工作。 然后我使用QandroidjnienEnvironment,还得到了蓝牙适配器的名称。请看代码

  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;");