簡體   English   中英

如何將android本機代碼與Qt Quick項目集成?

[英]How to integrate android native code with Qt Quick project?

我正在嘗試使用 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()將結果轉換為字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM