汪清芳 周飛虹



摘要:文章基于Qt on Android開發的設計思路,設計并實現了一款外貿指揮信息終端軟件,主要功能包含主框架、信令交互、系統設置、數據指揮、話音、多媒體等。軟件界面友好,操作簡單,功能多樣,解決了傳統指揮信息終端軟件功能有限、人機界面呆板、通信功能較弱、使用不便等問題。軟件主要采用C/C++編程語言進行開發,對于C/C++開發人員來說,減少了學習新的開發語言所耗費的時間,極大地提高了開發效率。C/C++開發人員也可以高效地開發出Android應用程序。
關鍵詞:Qt開發框架;Android應用程序;跨平臺;信息終端;C/C++編程語言
中圖分類號:TP311 文獻標識碼:A
文章編號:1009-3044(2024)14-0010-04 開放科學(資源服務)標識碼(OSID) :
0 引言
信息終端是一種手持式設備,可用于移動地控制相關設施[1]。傳統的信息終端軟件大多基于WinCE等操作系統編譯運行,軟件支持的功能和使用界面較為簡單,沒有良好的用戶體驗感,難以滿足日益增長的用戶需求。近年來,Android操作系統崛起,并在智能設備的應用開發中占據了一定的市場[2]。由于其開發成本低、操作方便、易于推廣等優勢,備受開發者青睞[3-5]。因此,開發能夠運行在Android操作系統上的指揮信息終端軟件勢在必行。
本文研究并設計了基于Qt的Android指揮信息終端軟件,在保證軟件基礎功能(如數據指揮、話音、多媒體等)穩定的前提下,逐步優化基礎功能,立志于打造一款基礎通用的指揮信息終端軟件。在此基礎上,根據項目需求增加功能定制,將來可以更好地服務于外貿項目中各種通信終端。
1 功能描述
指揮信息終端軟件功能主要由主框架、信令交互、多媒體、通信以及系統設置五大部分組成[6],軟件組成圖如圖1所示。
1.1 主框架
主框架功能主要由界面邏輯處理、數據庫、提示窗口等功能組成。
1) 界面邏輯處理:Android程序界面跳轉和桌面應用程序跳轉不同,桌面應用程序可以實現任意界面跳轉,而Android程序跳轉邏輯只能返回至上一個功能界面。
2) 數據庫:使用SQLite作為軟件數據庫,并提供一套規范統一的操作接口,包含了增、刪、改、查和事務回滾等功能。SQLite是一款小型輕量級的開源嵌入式數據庫,占用資源低,處理速度快,具備體積小、性能高、可移植性強等特點[7]。
3) 提示窗口:提供默認提示窗口和自定義提示窗口兩種風格樣式的接口函數,可在不同場景中使用。默認窗口適合一些簡單文本性的提示語,自定義窗口適合多屬性、多元素信息提示。
1.2 信令交互
信令交互是指本軟件與底層服務的信令交互功能,主要包括話音信令交互和自組網信令交互,支撐保障了話音呼叫服務功能和自組網設置功能的正常使用。話音信令包含了單呼、組呼、接聽、掛斷等信令;自組網信令包含了自組網狀態查詢、自組網設置和設置應答等信令。
1.3 多媒體
多媒體功能包含了拍照、錄像、相冊和視頻播放等功能。由于QtMultimedia::Camera類拍照無法很好對焦,導致拍攝效果不佳,以及其他一些如獲取視頻幀等問題,軟件最終采用Java原生方法,通過調用安卓系統功能函數,完成拍照、錄像和視頻播放等多媒體功能,然后通過Qt提供的JNI函數調用Java接口,很好地避免了Qt原生方法拍照性能不足的問題。
1.4 通信功能
通信功能主要由話音呼叫、數據指揮、船艇值班和報文記錄等4個功能模塊組成。話音呼叫包含了選呼、組呼等功能模塊。數據指揮功能包含了航行請求、命令指示、請示報告和警示短語等8類通用短語。船艇值班功能完成了船艇甲板、輪機和電氣三類船體設施運行情況每日登記上報功能。報文記錄功能提供了指揮短語的收發記錄功能,可查看指揮短語歷史發送和接收記錄。
1.5 系統設置
系統設置功能由基礎設置和自組網設置組成。基礎設置包含了通訊錄設置、亮度設置、本級身份設置、上級身份設置和定位授時等功能。自組網設置包含了網號、信道號、節點號和節點總數等設置功能。
2 關鍵技術研究
2.1 開發環境構建
Qt 下配置Android 開發環境需要準備好JavaJDK,Android SDK,Android NDK,Android ant,Androidadb,支持安卓的Qt 版本,如qt-opensource-windowsx86-android-5.9.2。注意:環境安裝時不能含有中文路徑。
1) 安裝Java JDK是編譯Android程序必要的Java 開發環境,需要配置系統環境變量:
變量名:JAVA_HOME
變量值:C:\Program Files\Java\JDK1.8.0_144
變量名:CLASSPATH
變量值:% JAVA_HOME% \lib;\% JAVA_HOME%\lib\tools.jar
2) Android SDK 安裝完畢后,把SDK 目錄下platform-tools文件夾路徑添加到系統環境變量后面:
變量名:PATH
變量值:C:\Program Files\Android\Android-SDK\platform-tools
3) Android NDK只需要安裝,無須配置環境變量。
4) Android ant1.10.1 解壓完畢后,將...\apacheant-1.10.1添加到系統環境變量中:
變量名:PATH
變量值:C: \Program Files\Android\ANT\apacheant-1.10.1\bin
5) Android adb(Android Debug Bridge 安卓調試橋):是Qt on Android開發時使用的調試工具,通過該工具可以直接操作管理Android模擬器或真實的An?droid設備(手機、平板等)。adb常用命令如下:
adb devices:查看當前連接設備,列出顯示
adb root:重新啟動adb,并獲取管理權限
adb shell:進入Android Shell命令環境中
adb disconnect <設備名>:斷開與指定設備的連接
adb install
adb uninstall –k:卸載軟件,如果加-k保留配置和緩存文件
6) 打開Qt Creator,依次點擊菜單“工具-選項-設備-Android”配置JDK、SDK、NDK、Ant 的安裝路徑。點擊“Start AVD Manager”可創建AVD,方便之后的調試。
2.2 界面邏輯處理
在GUI開發時,復雜的界面跳轉邏輯用程序實現特別費勁,本文給出的解決方案是利用Qt狀態機機制。Qt狀態機框架提供了一些類來創建執行狀態圖,狀態圖為一個系統如何對外界激勵進行反應提供了一個圖形化模型,該模型是通過定義一些系統可能進入的狀態以及系統怎樣從一個狀態切換到另一個狀態來實現的。用戶界面設計中采用狀態驅動,就可以根據當前狀態的不同,顯示不同的界面。
1) 調用準備:在pro文件中添加QT += SCML和包含頭文件include ,來提供對Qt 狀態機的支持。
2) 加載狀態機文件:
QScxmlStateMachin*m_achine=QScxml ?StateMachine:: fromFile(QStringLiteral“( : resource/views?tate.scxml”));
3) 跳轉目標頁面和回退頁面狀態切換:
m_achine->submitEvent(QString strDestPagr);
m_achine->submitEvent“( goback”);
4) 狀態變化槽函數:
void slotState()
{
QStringList S = m_achine->activeStateNames();
if(S.size()>0)
{
bool b = ui->stack->children.contains(p);
if(!b)
{
ui->stack->addWidget(p);
}
ui->stack->setCurrentWidget(p);
}}
2.3 SQLite 數據庫
在Qt下實現SQLite封裝調用,可以按照如下方法進行操作。
1) 調用準備:在pro文件中加入以下代碼,來提供對SQLite數據庫的支持,QT += sql。
2) 添加包含頭文件:
include
include
include
include
include
include
3) 創建并打開數據庫:
QSqlDatabase db = QSqlDatabase:: addDatabase“( QSQLITE”“, sqlite3”);
db. setDatabaseName“( /. database. db”);//數 據 庫路徑
db.open();
4) 建立數據庫連接:
QSqlDatabase db = QSqlDatabase:: data?base“( sqlite3”);
QSqlQuery query(db);
2.4 JNI 技術
關于Qt for Android程序如何完成對Android(Java 方法)的調用,從而實現多平臺的兼容主要是通過JNI 技術實現。解決方案是通過QAndroidJniEnvironment 類和QAndroidJniObject類,它們簡化了對Java方法的應用。QAndroidJniEnvironment 類:實現JNI 的環境,用于異常的檢查和清除等功能;QAndroidJniObject類用于調用Java方法。
1) 調用準備:在pro 文件中添加代碼QT += an?droidextras,來提供對Android庫的支持;
2) 調用方法:方法簽名格式為(參數類型)返回類型。調用靜態方法格式:QAndroidJniObject 對象名;對象名(方法名,方法簽名,方法參數列表),如果沒有參數,則方法簽名和方法參數列表可以省略,程序會自動提供正確的簽名。
2.5 多媒體實現
綜合考慮開發效率以及本軟件對于多媒體功能沒有特殊需求,系統相機相對而言封裝成熟、調用簡單,拍照和錄像清晰等因素,本文最終選擇Android提供的系統相機API實現多媒體功能。下面展示一些實現拍照和錄像功能需要配置的權限和核心代碼。
1) 添加必需的權限:
2) 調用相機拍照核心代碼:
Uri fileUri = Uri.fromFile(getOutputMediaFile());
Intent int = new Intent(MediaStore. ACTION_IMAGE_CAPTURE);
int.putExtra(MediaStore.EXTRA_OUTPUT,fileUri);
startActivityForResult(int. RECORD_SYSTEM_CAPTURE);
3) 調用相機視頻錄制核心代碼:
Uri fileUri = Uri.fromFile(getOutputMediaFile());
Intent int = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
int.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
int. putExtra(MediaStore. EXTRA_VIDEO_QUALITY,1);
int. putExtra(MediaStore. EXTRA_DURATION_LIMIT,10);
startActivityForResult(int, RECORD_SYSTEM_VIDEO);
3 軟件優勢和效果展示
3.1 軟件優勢
本軟件優勢主要體現在兩個方面:一是軟件界面展現;二是軟件開發效率。
1) 軟件界面展現:相比傳統指揮終端軟件,本軟件界面功能更為豐富,界面顯示效果大多采用圖像化界面,顯示效果更為簡潔直觀,操作也較為便利。
2) 軟件開發效率:本軟件開發語言主要是用C++ 代碼編寫實現的。由于Android原生開發具有學習難度大、移植性差等不足,在Android開發人員緊缺的實際情況下,C++軟件設計人員可以使用Qt開發Android 程序,減少了學習Android原生語言耗費的時間,極大地提高了開發效率,有效地規避了項目的進度風險。此外,使用Qt開發的應用程序,源碼支持跨平臺,可移植性高,后續可根據項目使用需求移植到其他項目中投入使用,避免了從零開始開發所增加的工作量。
3.2 效果展示
程序安裝運行在通導指揮信息終端的效果圖如圖2所示。
指揮信息終端軟件主界面效果圖如圖3所示。
數據指揮功能短語種類界面效果圖如圖4所示。
4 結論
本文以Windows 環境下采用基于Qt C/C++框架開發Android應用程序的設計思路[8-9],設計實現了“基于Qt的Android指揮信息終端軟件”。軟件通過了嚴格的測試實驗,從實驗的效果看,該軟件工作性能良好,運行穩定[10],目前軟件已正式投入生產并交付外方使用。
在未來的工作中,將會從兩方面進行改進:一是將繼續尋找Qt On Android加載地圖相關技術途徑與手段,有望能夠將地圖相關的功能和操作集成至指揮通信終端;二是將繼續對基礎業務邏輯和人機交互方面的部分功能進行優化,使其更貼近軟件實際應用場景和符合日常操作習慣。
參考文獻:
[1] 劉劍波.突發公共衛生事件應急指揮系統嵌入式手持信息終端[D].成都:四川大學,2006.
[2] 廖列法,張幸平.基于Android的智能可視化指揮系統[J].計算機工程與設計,2022,43(9):2694-2701.
[3] 劉偉,李杰,楊雁宇.基于Android的便攜式角度測量儀設計[J].電子器件,2017,40(4):1044-1048.
[4] 何東華.基于安卓的糧庫信息查詢系統[J].糧食儲藏,2013,42(2):47-50.
[5] 李亞東,馮仲科,曹明蘭,等.Android智能手機樹高測量APP開發與試驗[J].中南林業科技大學學報,2016,36(10):78-82.
[6] 曾浩煒,張駿驍,朱慶.基于北斗的應急測繪指揮終端設計和實現[J].地理信息世界,2016,23(4):81-83,89.
[7] 楊林楠,郜魯濤,林爾升,等.基于Android系統手機的甜玉米病蟲害智能診斷系統[J]. 農業工程學報,2012,28(18):163-168.
[8] 朱春華,張宜志.糧食儲備與決策系統的移動終端APP開發模型研究[J].食品工業,2017,38(4):254-256.
[9] 閆鋒欣,牛子杰,杜爍煒,等.基于Qt的Android應用程序C/C++開發方法與實踐[J].計算機系統應用,2018,27(7):96-102.
[10] 喻曉,夏澎.基于Qt的便攜式心電監護儀GUI應用軟件設計[J].計算機系統應用,2017,26(5):221-226.
【通聯編輯:謝媛媛】
基金項目:江西省高等學校教學改革研究課題(編號:JXJG-23-24-3)