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