【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 对象的方法。
恭疏短引; 一言均赋, 四韵俱成。 请洒潘江, 各倾陆海云尔:
推荐阅读
- Android加密有些机型引发的闪退
- Applied Nonparametric Statistics-lec9
- Android 操作系统的内存回收机制
- Android的长度单位理解(dp,sp,pt,px,in,mm)
- Android艺术——深看Activity的生命周期
- android 自动化测试案例之 MonkeyScript
- Android线程池
- 导入声明(open关键字)
- 7大最佳USB恢复软件列表(你应该选择哪个())