zoukankan      html  css  js  c++  java
  • 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 列表信息的)

  • 相关阅读:
    leetcode 122. Best Time to Buy and Sell Stock II
    leetcode 121. Best Time to Buy and Sell Stock
    python 集合(set)和字典(dictionary)的用法解析
    leetcode 53. Maximum Subarray
    leetcode 202. Happy Number
    leetcode 136.Single Number
    leetcode 703. Kth Largest Element in a Stream & c++ priority_queue & minHeap/maxHeap
    [leetcode]1379. Find a Corresponding Node of a Binary Tree in a Clone of That Tree
    正则表达式
    十种排序算法
  • 原文地址:https://www.cnblogs.com/hbrw/p/7058939.html
Copyright © 2011-2022 走看看