Qt 作 Android 開發,有時候須要網絡信息,這個例子是獲取手機搜索到的信號較強的 WIFI 信號的列表。過程當中須要用到 JNI 的知識。另外,例子比較簡單,若是有須要這個的,能夠自行修改。java
程序分爲兩個部分,一個是 JAVA 程序的編寫,一個是 Qt 主程序的編寫,至於對 AndroidManifest.xml 文件的修改部分我就不加綴述了。android
JAVA 程序部分:數組
package com.wifi;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import java.util.List;
import android.os.Message;
import android.os.Handler;
import android.os.Bundle;
public class WifiInfo extends org.qtproject.qt5.android.bindings.QtActivity
{
private static WifiInfo m_instance;
private WifiManager wifiManager;
List<ScanResult> listb;
public WifiInfo(){
m_instance = this;
}
public String[] callExternalCamera()
{
System.out.println("I an In");
wifiManager = (WifiManager)getSystemService(WIFI_SERVICE);
listb = wifiManager.getScanResults();
String[] listk = new String[listb.size()];
String res = " %";
if(listb!=null){
for( int i=0;i<listb.size();i++){
ScanResult scanResult = listb.get(i);
listk[i] = scanResult.SSID;
System.out.println(scanResult.SSID);
System.out.println("\n");
res += scanResult.SSID + "%";
}
return listk;
}
return listk;
}
}
C++ 程序部分:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QAndroidJniObject>
#include <QAndroidJniEnvironment>
#include <QtAndroid>
#include <QString>
#include <QList>
#include <qDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
getScanResult();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::getScanResult()
{
#ifdef Q_OS_ANDROID
QAndroidJniObject activity = QtAndroid::androidActivity();
QAndroidJniObject str = activity.callObjectMethod("callExternalCamera", "()[Ljava/lang/String;");
jobjectArray objectArray = str.object<jobjectArray>();
QAndroidJniEnvironment qjniEnv;
const int n = qjniEnv->GetArrayLength(objectArray);
qDebug() << "Got jobjectArray of length:" << n; // correct
for (int i = 0; i < n; ++i) {
qDebug() << "Iteration:" << i;
QAndroidJniObject element = qjniEnv->GetObjectArrayElement(objectArray, i);
qDebug() << element.toString() ;
}
#endif
}
程序功能比較單一,程序主要的幾個部分有一下幾個:
1. Qt 調用 JAVA 非靜態函數。
2. Qt 調用 JAVA 函數返回值爲 對象數組類型的函數簽名。
3. Qt 解析 jobjectarray 對象的方法。
恭疏短引; 一言均賦, 四韻俱成。 請灑潘江, 各傾陸海云爾:(PS:7.0 之後的版本若是不打開系統定位就沒辦法得到 Wifi 列表信息的)