項(xiàng)目六界面數(shù)據(jù)實(shí)現(xiàn)-任務(wù)1農(nóng)業(yè)大棚中溫濕度實(shí)時(shí)顯示_第1頁(yè)
項(xiàng)目六界面數(shù)據(jù)實(shí)現(xiàn)-任務(wù)1農(nóng)業(yè)大棚中溫濕度實(shí)時(shí)顯示_第2頁(yè)
項(xiàng)目六界面數(shù)據(jù)實(shí)現(xiàn)-任務(wù)1農(nóng)業(yè)大棚中溫濕度實(shí)時(shí)顯示_第3頁(yè)
項(xiàng)目六界面數(shù)據(jù)實(shí)現(xiàn)-任務(wù)1農(nóng)業(yè)大棚中溫濕度實(shí)時(shí)顯示_第4頁(yè)
項(xiàng)目六界面數(shù)據(jù)實(shí)現(xiàn)-任務(wù)1農(nóng)業(yè)大棚中溫濕度實(shí)時(shí)顯示_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

遼寧輕工職業(yè)學(xué)院任務(wù)實(shí)現(xiàn)知識(shí)準(zhǔn)備任務(wù)目標(biāo)項(xiàng)目6界面數(shù)據(jù)更新的實(shí)現(xiàn)遼寧輕工職業(yè)學(xué)院任務(wù)1農(nóng)業(yè)大棚中溫濕度的實(shí)時(shí)顯示項(xiàng)目目標(biāo)遼寧輕工職業(yè)學(xué)院遼寧輕工職業(yè)學(xué)院智能農(nóng)業(yè)系統(tǒng)

境數(shù)據(jù)是以無(wú)線傳感器技術(shù)為基礎(chǔ),實(shí)現(xiàn)對(duì)農(nóng)業(yè)生產(chǎn)環(huán)境的監(jiān)測(cè)和邏輯控制。本任務(wù)農(nóng)業(yè)大棚中通過(guò)

ZigBee協(xié)調(diào)器模塊、ZigBee繼電器模塊與ZigBee溫濕度傳感器獲取到的溫濕度值,通過(guò)Handler-message的機(jī)制在移動(dòng)終端界面中完成數(shù)據(jù)的更新顯示。遼寧輕工職業(yè)學(xué)院【任務(wù)目標(biāo)】掌握消息處理類(Handler)的應(yīng)用掌握消息類(Message)的應(yīng)用1.消息類(Message)簡(jiǎn)介遼寧輕工職業(yè)學(xué)院【知識(shí)準(zhǔn)備】當(dāng)Android平臺(tái)啟動(dòng)一個(gè)應(yīng)用程序會(huì)開啟一個(gè)主線程(界面UI線程),由界面UI線程來(lái)管理所顯示的所有控件,并件,來(lái)響應(yīng)用戶并分發(fā)事件等。因此,在界面UI線用戶點(diǎn)擊事一般不執(zhí)行耗時(shí)的操作,如聯(lián)網(wǎng)

數(shù)據(jù)等,否則出現(xiàn)ANR錯(cuò)誤。所以就將這些操作放在子線

,但是由于AndroidUI線程是不安全的,所以只能在主線

更新UI。正如其他GUI應(yīng)用程序一樣,Android應(yīng)用程序也是消息(事件)驅(qū)動(dòng)的。這種消息的傳遞必須依賴于應(yīng)用框架提供的消息機(jī)制。Android本身提供了2種消息機(jī)制:組件間消息傳遞(Intent)和線程間消息傳遞(Message)。在此主要

Android線程間消息傳遞機(jī)制及其應(yīng)用。1.消息類(Message)簡(jiǎn)介遼寧輕工職業(yè)學(xué)院【知識(shí)準(zhǔn)備】android.os.Message是定義一個(gè)Messge包含必要的描述和屬性

數(shù)據(jù),并且此對(duì)象可以被發(fā)送給android.os.Handler處理。屬性字段:arg1、arg2、what、obj、replyTo等;其中arg1和arg2是用來(lái)存放

整型數(shù)據(jù)的;what是用來(lái)保存消息標(biāo)示的;obj是Object類型的任意

對(duì)象;replyTo是消息管理器,會(huì)關(guān)聯(lián)到一個(gè)handler,handler就是處理其中的消息。通常對(duì)Message對(duì)象不是直接new出來(lái)的,只要調(diào)用handler中的obtainMessage方法來(lái)直接獲得Message對(duì)象,現(xiàn)把常用到的一些方法說(shuō)明提供如下方法名稱含義Message()構(gòu)造一個(gè)新的Message對(duì)象Message

obtain

()從全局池中返回一個(gè)新的Message實(shí)例Message可理解為線程間交流的信息,處理數(shù)據(jù)

線程需要更新UI,則發(fā)送Message內(nèi)含一些數(shù)據(jù)給UI線程。

在單線程模型下,為了解決類似的問(wèn)題,Android設(shè)計(jì)了一個(gè)Message

Queue(消息隊(duì)列),

線程間可以通過(guò)該Message

Queue并結(jié)合Handler和Looper組件進(jìn)行信息交換。一個(gè)Message對(duì)象具有下表所對(duì)應(yīng)的屬性:1.消息類(Message)簡(jiǎn)介遼寧輕工職業(yè)學(xué)院【知識(shí)準(zhǔn)備】屬性類型描述arg1int用來(lái)存放整型數(shù)據(jù)arg2int用來(lái)存放整型數(shù)據(jù)objObject用來(lái)存放發(fā)送給 的Object類型的任意對(duì)象ReplyToMessenger用來(lái)指定此Message發(fā)送到何處的可選Messager對(duì)象whatint用于指定用戶自定義的消息代碼,這樣接收者可以了解這個(gè)消息的信息2.消息處理類(Handler)簡(jiǎn)介遼寧輕工職業(yè)學(xué)院【知識(shí)準(zhǔn)備】在使用Handler處理消息的時(shí)候,Handler一般會(huì)揮發(fā)兩個(gè)作用:1、在新線

發(fā)送消息;2、在主線程(界面線息。在實(shí)際的程序開發(fā)中,Handler類為開發(fā)獲取并處理消提供了便捷的開發(fā)策略,在新線程(可以是多個(gè)新線

編寫消息發(fā)送的功能代碼,在主線

接收、識(shí)別并處理。這就解決了何時(shí)發(fā)送何時(shí)處理的問(wèn)題。通過(guò)設(shè)計(jì)智能農(nóng)業(yè)移動(dòng)應(yīng)用相關(guān)業(yè)務(wù)參數(shù),需要熟悉和使用Handler類的相關(guān)方法,現(xiàn)把常用到的一些方法說(shuō)明提供如下方法名稱含義void handleMessage(Message

msg)主線程處理消息的方法;boolean

hasMessages(int

what,

Objectobject)檢查消息隊(duì)列是否包含有what屬性并且object屬性為指定對(duì)象的消息;finalboolean hasMessages(int

what)檢查消息隊(duì)列是否包含有what屬性的消息;finalMessage

obtainMessage()獲取消息;2.消息處理類(Handler)簡(jiǎn)介遼寧輕工職業(yè)學(xué)院【知識(shí)準(zhǔn)備】finalbooleanpost(Runnable

r)將一個(gè)線程添加到消息隊(duì)列;final

booleanpostDelayed(Runnabler,

long

delayMillis)將一個(gè)線程delayMillis毫秒后添加到消息隊(duì)列;finalbooleansendMessage(Message

msg)立即發(fā)送消息;finalbooleansendMessageDelayed(Message

msg,

longdelayMillis)延遲delayMillis毫秒后發(fā)送消息;2.消息處理類(Handler)簡(jiǎn)介遼寧輕工職業(yè)學(xué)院【知識(shí)準(zhǔn)備】在開發(fā)移動(dòng)應(yīng)用程序時(shí),開發(fā) 只需要重寫Handler類中的處理消息的handleMessage(Message

msg)方法,每當(dāng)新線程使用sendMessage(Message

msg)發(fā)送消息時(shí),Handler類會(huì)自動(dòng)回調(diào)handleMessage(Message

msg)的邏輯代碼。3.使用Handler傳遞消息遼寧輕工職業(yè)學(xué)院【知識(shí)準(zhǔn)備】使用Handler-Message消息傳遞機(jī)制更新主線程UI需要經(jīng)過(guò)以下步驟可以實(shí)現(xiàn):(1)在主線程Activity中創(chuàng)建Handler對(duì)象,并重寫handleMessage(Message

msg)方法;Handler

mHandler=new

Handler(){public

void

handleMessage(android.os.Message

msg){switch

(msg.what)

{case

0://對(duì)溫度值進(jìn)行操作break;case

1://對(duì)濕度值進(jìn)行操作break;case

2://對(duì)光照值進(jìn)行操作break;}};};3.使用Handler傳遞消息遼寧輕工職業(yè)學(xué)院【知識(shí)準(zhǔn)備】在新線

使用主線程創(chuàng)建的Handler對(duì)象,調(diào)用它的發(fā)送消息方法向主線程發(fā)送消息;Message

mMsg=new

Message();//創(chuàng)建Message對(duì)象mMsg.obj=0;//設(shè)置mMsg的傳輸值mMsg.what=ISTEMP;//設(shè)置mMsg的類型mHandler.sendMessage(mMsg);//通過(guò)構(gòu)造函數(shù)傳入的Handler發(fā)送Message利用Handler對(duì)象的handleMessage(Message

msg)方法接收消息,然后根據(jù)obj的不同取值執(zhí)行不同的業(yè)務(wù)邏輯(代碼見第一步);遼寧輕工職業(yè)學(xué)院【任務(wù)實(shí)現(xiàn)】在Eclipse下創(chuàng)建一個(gè)Android項(xiàng)目,命名為AndroidDemo6_1,將項(xiàng)目2任務(wù)8的界面導(dǎo)入到本項(xiàng)目中。在

.example.androiddemo6_1包中,新建一個(gè)類BasePort.java,用于打開Zigbee的四個(gè)輸入串口,定義openZigBeePort方法,打開ZigBee的端口,代碼如下:public

class

BasePort

{/**打開Zigbee四輸入串口@param

com

如COM0

COM1

COM2@param

mode區(qū)分是USB串口還是COM串口,0表示COM,遼寧輕工職業(yè)學(xué)院【任務(wù)實(shí)現(xiàn)】1

表示

USB,2表示是低頻與

頻*

@param

baudRate(0-9)波特率

0=1200

1=24002=4800

3=9600

4=19200

5=38400

6=57600

7=1152008=230400

9=921600*

@return串口*/public

int

openZigBeePort(int

com,int

mode,int

baudRate){Zigb=ZigBee ogServiceAPI.openPort(com,

mode,

baudRate);return

Zigb

;}遼寧輕工職業(yè)學(xué)院【任務(wù)實(shí)現(xiàn)】3.新建closeZigBeePort()方法用于四個(gè)輸入串口的關(guān)閉/***關(guān)閉Zigbee四輸入串口*/public

void

closeZigBeePort(){ZigBee

ogServiceAPI.closeUart();}遼寧輕工職業(yè)學(xué)院【任務(wù)實(shí)現(xiàn)】4.

.example.androiddemo6_1包中,再新建一個(gè)類FourInput.java繼承自BasePort.java類,定義三個(gè)整型的變量ISTEMP、ISHUMI、ISLIGHT分別代表溫度、濕度和光照感應(yīng),初始值分別為0、1、2;定義Handler類的對(duì)象mHandler初始值為null;定義mFourInput_fd

變量初始值為

0。public

class

FourInput

extends

BasePort

{private

final

int

ISTEMP

=

0;private

final

int

ISHUMI

=

1;private

final

int

ISLIGHT

=

2;private

Handler

mHandler

=

null;public

static

int

mFourInput_fd

=

0;遼寧輕工職業(yè)學(xué)院【任務(wù)實(shí)現(xiàn)】5.在重寫的FourInput()方法中,利用handler實(shí)現(xiàn)對(duì)頁(yè)面的更新,將打開四個(gè)端口獲得的溫度、濕度和波特率的值賦給變量mFourInput_fd,代碼如下:public

FourInput

(int

com,int

mode,int

baudRate,Handlerhandler){this.mHandler

=

handler;mFourInput_fd

=

openZigBeePort(com,

mode,baudRate);}遼寧輕工職業(yè)學(xué)院【任務(wù)實(shí)現(xiàn)】6.在重寫的start方法中,創(chuàng)建ZigBeeService的對(duì)象,并對(duì)其進(jìn)行實(shí)例化,且開啟服務(wù)。利用ZigBee

ogServiceAPI的getTemperature方法更新溫度信息。代碼如下:ZigBee

ogServiceAPI.getTemperature("temp",

newOnTemperatureResponse(){@Overridepublic

void

onValue(String

arg0)

{//創(chuàng)建Message對(duì)象Message

mMsg

=

new

Message();//設(shè)置mMsg的傳輸值mMsg.obj

=

arg0;遼寧輕工職業(yè)學(xué)院【任務(wù)實(shí)現(xiàn)】//設(shè)置mMsg的類型mMsg.what

=

ISTEMP;//通過(guò)構(gòu)造函數(shù)傳入的Handler發(fā)送MessagemHandler.sendMessage(mMsg);}@Overridepublic

void

onValue(double

arg0)

{}});遼寧輕工職業(yè)學(xué)院【任務(wù)實(shí)現(xiàn)】重寫的start方法中,創(chuàng)建ZigBeeService的對(duì)象,并對(duì)其進(jìn)行實(shí)例化,且開啟服務(wù)。利用ZigBee

ogServiceAPI的getHum方法更新濕度的值重寫的start方法中,創(chuàng)建ZigBeeService的對(duì)象,并對(duì)其進(jìn)行實(shí)例化,且開啟服務(wù)。利用ZigBee

ogServiceAPI的getLight方法更新光照的值在MainActivity.java中,定義TextView類的三個(gè)對(duì)象mTvTemp,mTvHumi,mTvLight和FourInput類的對(duì)象mfourInput初始值為null。代碼如下:private

TextView

mTvTemp,mTvHumi,mTvLight;private

FourInput

mFourInput

=null遼寧輕工職業(yè)學(xué)院【任務(wù)實(shí)現(xiàn)】10.在重寫的onCreate方法中,調(diào)用initView()方法(需自定義),對(duì)視圖進(jìn)行初始化,將四輸入接入COM1,并開啟四個(gè)輸入端口protected

void

onCreate(Bundle

savedInstanceState){super.onCreate(savedInstanceState);setConten

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論