Qt for android 获取 Wifi 列表

【Qt for android 获取 Wifi 列表】亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述Qt for android 获取 Wifi 列表相关的知识,希望能为你提供帮助。
Qt 做 android 开发,有时候需要网络信息,这个例子是获取手机搜索到的信号较强的 WIFI 信号的列表。过程中需要用到 JNI 的知识。另外,例子比较简单,如果有需要这个的,可以自行修改。
程序分为两个部分,一个是 java 程序的编写,一个是 Qt 主程序的编写,至于对 AndroidManifest.xml 文件的修改部分我就不加缀述了。
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 对象的方法。

恭疏短引;  一言均赋,  四韵俱成。  请洒潘江,  各倾陆海云尔:













    推荐阅读