java - QT 蓝牙 .so 集成到 Android Java 项目中。QAndroidJniObject 和 QBluetoothDeviceDiscoveryAgent 的问题
问题描述
大家好!
我正在编写代码以使用 JNI 通过 QT 库获得 android 蓝牙连接。主要思想是有一个黑匣子连接到设备以获取数据,分析等,这就是为什么我需要使用QT蓝牙并且不将设备数据从java代码传递到lib。
所以。
起初,我使用 JNIEnv* env 来检查是否可以获得蓝牙适配器,并且它可以工作。然后我使用了 QAndroidJniEnvironment 并获得了蓝牙适配器名称。请看代码。
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;
因此,在这里我可以看到通过 QAndroidJniEnvironment 接收到的真实设备蓝牙适配器名称。
当我想使用 QBluetoothDeviceDiscoveryAgent 时会出现此问题。我收到一条消息:qt.bluetooth.android:设备不支持蓝牙
我查看了“qbluetoothdevicediscoveryagent_android.cpp”文件,发现在构造函数中它使用了 QAndroidJniObject。
QAndroidJniEnvironment env;
adapter = QAndroidJniObject::callStaticObjectMethod("android/bluetooth/BluetoothAdapter",
"getDefaultAdapter",
"()Landroid/bluetooth/BluetoothAdapter;");
它在适配器变量中没有任何内容,但是如果我在自己的方法中调用 QAndroidJniObject::callStaticObjectMethod 并将“android/bluetooth/BluetoothAdapter”更改为 classBta(您在上面看到)它可以正常工作。
QAndroidJniObject adapter=QAndroidJniObject::callStaticObjectMethod(
classBta,"getDefaultAdapter","()Landroid/bluetooth/BluetoothAdapter;");
看起来 QAndroidJniObject 工作不正确并调用了错误的方法。你能帮我解决这个问题吗?我真的需要让QBluetoothDeviceDiscoveryAgent工作。
解决方案
推荐阅读
- javascript - 无法调用 AJAX
- dart - Flutter 应用程序中的远程配置在获取时引发异常
- angular - PrimeNG:p-Table 和 p-dataTable 之间的差异
- ios - 如何为设置(Obj C)创建一个数组?
- apache-spark - 为什么 Spark GraphX 强制 VertexId 为 Long?
- android - 代号一:Web 视图出现在 Iphone 上,但不是 android
- javascript - 当下拉值改变时 Price 也改变了表格中的 Want Price 和 size
- sql - 两个 Tsql 查询之间的区别
- php - 从同一数据库行获取多个值
- angular - 如何将 JSON 对象存储在变量中?