汪清芳 周飛虹



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