获取原始NMEA 0183语句的方法
? ? ? ? MEA0183語(yǔ)句是從衛(wèi)星上廣播的含有豐富信息的原始GPS語(yǔ)句,它的語(yǔ)法為海用電子設(shè)備的標(biāo)準(zhǔn)格式。它所含的信息量遠(yuǎn)遠(yuǎn)不止位置坐標(biāo),開(kāi)發(fā)和利用這些信息可能會(huì)帶來(lái)意想不到的商機(jī)。比如,它發(fā)出的時(shí)間信息已經(jīng)被很多鐘表廠(chǎng)商利用,開(kāi)發(fā)出了衛(wèi)星授時(shí)鐘表,讓使用者再不用對(duì)表,隨時(shí)都能得到標(biāo)準(zhǔn)時(shí)間。這篇小文不打算介紹如何開(kāi)發(fā)它的利用,而是說(shuō)說(shuō)如何用手機(jī)讀取它,實(shí)現(xiàn)從無(wú)到有的過(guò)程。
? ? ? ??
? ? ? ? android手機(jī)讀取NMEA0183原始語(yǔ)句過(guò)程不是很復(fù)雜,總共需要4步,只要每步按要求走對(duì)了,就肯定能獲得NMEA0183語(yǔ)句了。下面分別概述。
第一步是權(quán)限的獲得,就是這兩個(gè)權(quán)限:
? ? ? ? 這兩個(gè)權(quán)限在應(yīng)用清單中聲明,在寫(xiě)代碼的時(shí)候,AS有時(shí)會(huì)要求你做權(quán)限檢查,似乎有點(diǎn)多此一舉。
第二步是監(jiān)聽(tīng),使用LocationListener()方法,當(dāng)你聲明它的時(shí)候,就會(huì)有4個(gè)回調(diào)方法:
onLocationChanged(Location?location)方法是在位置改變時(shí)回調(diào)位置的信息;
onProviderDisabled(String?provider)當(dāng)用戶(hù)關(guān)閉了信息的提供者時(shí)會(huì)調(diào)用;onProviderEnabled(String?provider)當(dāng)用戶(hù)打開(kāi)了信息提供者的時(shí)候調(diào)用;onStatusChanged(String?provider,int?status,Bundle?extras)這個(gè)方法在信息提供者的狀態(tài)在可用,暫時(shí)不可用和無(wú)服務(wù)三個(gè)狀態(tài)直接切換時(shí)被調(diào)用。服務(wù)停止的狀態(tài)碼為OUT_OF_SERVICE,如何服務(wù)停止,在短期內(nèi)可恢復(fù),狀態(tài)碼為T(mén)EMPORARILY_UNAVAILABLE,如果服務(wù)正常有效,狀態(tài)碼為AVAILABLE。實(shí)際上,我只看到過(guò)第1個(gè)方法回調(diào)的信息,其他的沒(méi)見(jiàn)過(guò)。
? ? ? ? 第三步是信息更新。一般情況下,位置的信息是個(gè)動(dòng)態(tài)的信息,所以實(shí)時(shí)更新是位置信息的一個(gè)特點(diǎn),在android中,位置信息的更新使用的是requestLocationUpdates(String?provider,long?mintime,float?minDistance,LocatoinListener?listener)方法,根據(jù)傳入?yún)?shù)的不同它有5個(gè)變體,上面列出的常用的一種。第1個(gè)參數(shù)是位置信息的提供者,在獲取NMEA0183時(shí),我設(shè)置的是GPS_PROVIDER,第2個(gè)參數(shù)是最小時(shí)間間隔,這個(gè)要看APP的使用目的和使用者運(yùn)動(dòng)的速度了,NMEA0183原始語(yǔ)句的數(shù)據(jù)量大,時(shí)間間隔如果太短了設(shè)備有可能響應(yīng)不及時(shí)。
第四步就是讀取了。NMEA0183語(yǔ)句的讀取方法雖然都是用addNmeaListener方法,但是根據(jù)設(shè)備的固件版本不同采用不同的讀取模式,手機(jī)android版本API等級(jí)23-29的要用OnNmeaMessageListener()監(jiān)聽(tīng)模式讀取NMEA0183語(yǔ)句,這個(gè)是代碼:
手機(jī)android的API等級(jí)在15-28的可以用Nmealistener監(jiān)聽(tīng)模式,也可以用GpsStatus.NmeaListener接口模式。用Nmealistener的代碼如下圖:
用GpsStatus.NmeaListener接口模式的代碼如下圖:
這幾種方法我都試驗(yàn)過(guò),感覺(jué)第1種方法比較可靠,它的連續(xù)性好,可以持續(xù)很長(zhǎng)時(shí)間不間斷地獲取NMEA0183語(yǔ)句,低版本的方法雖然也能持續(xù)工作很長(zhǎng)時(shí)間,但有時(shí)會(huì)有間斷。如果版本23以上,推薦使高版本的方法。另外,如果要想連續(xù)不斷的獲得NMEA0183語(yǔ)句,定期激活更新方法能取得較好的效果。在這里我要感謝doris_d大神,他的經(jīng)驗(yàn)和提示解決了我在讀取方法與固件版本方面的困惑!
總結(jié)
以上是生活随笔為你收集整理的获取原始NMEA 0183语句的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C语言程序设计 利用数组处理批量数据
- 下一篇: 实验二:线性时间选择