如何将android本机代码与Qt Quick项目集成?

我正在尝试使用 QAndroidJniObject 将 wifi 名称连接到我的手机。

java文件:

package org.qtproject.example;
import android.net.NetworkInfo.DetailedState;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.app.Activity;
import android.content.Context;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;



public class QtAndroidToastJava extends QtActivity
{



    public static String getWifiName(Context context) {
        WifiManager manager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        if (manager.isWifiEnabled()) {
           WifiInfo wifiInfo = manager.getConnectionInfo();
           if (wifiInfo != null) {
              DetailedState state = WifiInfo.getDetailedStateOf(wifiInfo.getSupplicantState());
              if (state == DetailedState.CONNECTED || state == DetailedState.OBTAINING_IPADDR) {
                  return wifiInfo.getSSID();
              }
           }
        }
        return null;
    }
}

我的 cpp 代码是

void WIFICLASS::updateAndroidNotification()
{

qDebug()<<"******************************************8";

auto returnString = QAndroidJniObject::callStaticMethod <jstring>("org/qtproject/example/QtAndroidToastJava",
                                             "getWifiName","(V;)Ljava/lang/String");

// //  QString user = juser.toString();
//   qDebug()<<"ANSWER"<<user;

 qDebug()<<returnString;

}

在尝试构建这个之后,我得到了这个错误:23: error: undefined reference to '_jstring* QAndroidJniObject::callStaticMethod<_jstring*>(char const*, char const*, char const*, ...) '

我该如何解决这个问题?

这样做的正确方法是什么?

菲利克斯

这里有两件事不对:

1.) 您在 C++ 中传递的消息签名是错误的。它应该是:

"(Landroid/content/Context;)Ljava/lang/String;"

请注意;每个班级名称的末尾!它总是L<classname>;此外,您必须始终完全匹配 java 中声明的方法。多个参数不需要分开。如果你有一个方法void test(int a, int b),签名就是(II)V.

2.) 你调用的方法是一个对象方法,这意味着你必须使用 QAndroidJniObject::callStaticObjectMethod

auto res = QAndroidJniObject::callStaticObjectMethod("org/qtproject/example/QtAndroidToastJava",
                                                     "getWifiName",
                                                     "(Landroid/content/Context;)Ljava/lang/String;",
                                                     QtAndroid::androidContext().object());

该方法返回一个QAndroidJniObject,您可以调用QAndroidJniObject::toString()将结果转换为字符串。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章