Qt for android 擷取 Wifi 列表

來源:互聯網
上載者:User

標籤:clu   job   extern   for   ati   oid   his   java   class   

  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 對象的方法。
恭疏短引; 一言均賦, 四韻俱成。 請灑潘江, 各傾陸海云爾:

Qt for android 擷取 Wifi 列表

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.