• 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("
    ");
                    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 列表信息的)

  • 相关阅读:
    在CentOS中安装VMware Tools
    引用
    iomanip头文件库函数
    第2章 寄存器(CPU工作原理)
    二维差分
    组合数学——康托展开和逆康托展开
    动态规划精讲(一)区域和检索
    动态规划精讲(一)最大子矩阵
    freopen
    动态规划精讲(一)环形子组数的最大和
  • 原文地址:https://www.cnblogs.com/hbrw/p/7058939.html
Copyright © 2020-2023  润新知