版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、相機(jī)中使用定位服務(wù)獲取拍照時的地理位置M廠產(chǎn)品軟件部 鄒建敏一、基礎(chǔ)知識現(xiàn)代智能手機(jī)的一個重要功能就是定位,當(dāng)用戶在使用相機(jī)拍照時如果能夠記錄當(dāng)前照片拍攝時的地理位置信息,并且按照不同的地理位置把照片分成不同的文件夾,對于喜歡旅游和拍照的用戶來說這是一個很好的體驗。在Android手機(jī)中通過定位獲取地理位置一般有以下幾種方式: 1、 GPS或AGPS:使用GPS定位需要在室外使用,在室內(nèi)是接受不到GPS衛(wèi)星信號,也當(dāng)然不能定位。GPS使用一個衛(wèi)星群將地點(diǎn)和時間數(shù)據(jù)從太空直接發(fā)送到你的手機(jī)上。如果手機(jī)接收來自3個衛(wèi)星的信號,那么它可以顯示你在地圖上的方位,如果手機(jī)可以接收4個衛(wèi)星的信號,它還可以
2、顯示出你的海拔。在室內(nèi)由于接受不到GPS衛(wèi)星信號,可以使用AGPS(輔助GPS)定位,它的原理和GPS定位的不同點(diǎn)在于AGPS是通過使用數(shù)據(jù)網(wǎng)絡(luò)(GPRS、3G等)或者Wi-Fi向GPS衛(wèi)星發(fā)送定位數(shù)據(jù),所以使用AGPS需要網(wǎng)絡(luò)支持,而GPS不需要網(wǎng)絡(luò)。2、 基站定位:由于運(yùn)營商的每個基站都有確定的編號和位置,運(yùn)營商可以根據(jù)用戶當(dāng)前使用的基站與周圍基站的距離來確定用戶的當(dāng)前的位置,所以基站定位在基站分布密集的城市定位更精確。3、 Wi-Fi定位:原理與基站定位相同,主要區(qū)別在于Wi-Fi定位使用的是用戶當(dāng)前接入點(diǎn)的位置,由于Wi-Fi的覆蓋區(qū)域更小,所以它的精確度更高。 后兩種定位方式由于需要
3、網(wǎng)絡(luò)的支持,所以在Android SDK中統(tǒng)一為基于網(wǎng)絡(luò)的定位即網(wǎng)絡(luò)定位。2、 如何使用定位服務(wù)獲取地理位置結(jié)束監(jiān)聽獲取和使用最新的位置信息開啟位置服務(wù)監(jiān)聽實現(xiàn)監(jiān)聽器的接口(LocationListener)獲取位置服務(wù)的LocationManager取位置服務(wù)管理器(LocationManager)理器(LocationManager)在Android手機(jī)的應(yīng)用中使用定位服務(wù),一般有以下幾個步驟:下面結(jié)合11071項目相機(jī)中GPS定位和網(wǎng)絡(luò)定位來了解在手機(jī)應(yīng)用中怎么獲取當(dāng)前的地理位置。1、 獲取定位服務(wù)的LocationManager/定義LocationManager對象private L
4、ocationManager mLocationManager = null; /通過getSystemService()方法獲取LocationManagerif (null = mLocationManager) mLocationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);2、 實現(xiàn)監(jiān)聽器的接口(android.location.LocationListener),其中有些重要的變量和函數(shù)如下:/實現(xiàn)接口的內(nèi)部類變量 Location mLastLocation; /定義Location對象S
5、tring mProvider; /獲取Location的Providerboolean mValid = false; /標(biāo)志獲取的Location是否有效/內(nèi)部類的構(gòu)造函數(shù),需要參數(shù)provider,provider一般有兩種: LocationManager.GPS_PROVIDER和LocationManager.NETWORK_PROVIDERpublic LocationListener(String provider) mProvider = provider; /設(shè)置provider(定位方式) mLastLocation = new Location(mProvider);
6、/創(chuàng)建Location對象/當(dāng)獲取到新位置或者位置發(fā)生變化時調(diào)用,public void onLocationChanged(Location newLocation) /判斷獲取到的位置是否合法if (newLocation.getLatitude() = 0.0 &newLocation.getLongitude() = 0.0) return;/當(dāng)獲取到的位置合法時,通過Location的set()方法更新位置mLastLocation.set(newLocation);mValid = true;/獲取當(dāng)前最新的位置對象,首先判斷當(dāng)前的Location是否合法,如果合法則返回Locat
7、ion對象,否則返回Null/定義LocationListener對象3、開啟位置服務(wù)監(jiān)聽,使用方法startReceivingLocationUpdates(),如下所示:protected void startReceivingLocationUpdates() CameraLog.v(TAG, startReceivingLocationUpdates();if (null = mLocationManager) return;/判斷是否打開GPS開關(guān)if (mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
8、try /開始要求更新位置信息,使用GPS定位方式mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,5000,0F,mLocationListeners0); catch (java.lang.SecurityException ex) CameraLog.v(TAG, Fail to request location update, ignore., ex); catch (IllegalArgumentException ex) CameraLog.v(TAG, GPS provider does no
9、t exist. + ex.getMessage();/檢測當(dāng)前手機(jī)網(wǎng)絡(luò)是否可用if (checkInternet() /判斷使用網(wǎng)絡(luò)方式獲取位置的開關(guān)是否打開if (mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) try /開始要求更新位置信息,使用網(wǎng)絡(luò)定位方式mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,5000,0F,mLocationListeners1); catch (java.lang.Sec
10、urityException ex) CameraLog.v(TAG, Fail to request location update, ignore., ex); catch (IllegalArgumentException ex) CameraLog.v(TAG, Network provider does not exist. + ex.getMessage();在上面的代碼中使用到一個重要的函數(shù)來更新位置:LocationManager.requestLocationUpdates(String provider, long minTime, float minDistance, L
11、ocationListener listener),該方法的作用是通過給定的provider名稱,并將其綁定指定的LocationListener監(jiān)聽器,周期性的更新位置信息,其中第一個參數(shù)是provider名稱即定位的方式,一般為GPS和NetWork兩種,第二個參數(shù)是更新位置的時間,單位是毫秒,第三個是更新的距離,單位是米,第四個參數(shù)是位置服務(wù)的監(jiān)聽。4、 獲取和使用最新的位置信息,主要工作是如何把已經(jīng)獲取到的位置信息(經(jīng)度和緯度)設(shè)置到照片中和保存到數(shù)據(jù)庫中(1) 獲取最新的位置信息,主要方法是getCurrentLocation(),改方法返回一個Location對象。protecte
12、d Location getCurrentLocation() CameraLog.v(TAG, getCurrentLocation();Location l = null;for (int i = 0; i mLocationListeners.length; i+) /獲取LocationListener中最新更新的位置信息l = mLocationListenersi.current();/判斷是否已經(jīng)獲取到合法的位置信息if (null != l) break; /退出循環(huán)return l;(2) 使用獲取的位置信息a、 在拍照時把位置信息設(shè)置到照片中,在11071的相機(jī)中主要有以下
13、步驟:1) 在onSnap()方法中獲取當(dāng)前的位置信息,通過調(diào)用getCurrentLocation()Location loc = getCurrentLocation();2) 在在onSnap()方法中調(diào)用CameraDevice的setPictureInfo()方法把位置信息添加到照片中mCameraDevice.setPictureInfo(rotation, loc); /設(shè)置照片信息以下是該方法的詳解:public void setPictureInfo(int lastOrientation, Location loc) CameraLog.v(TAG, setPictureI
14、nfo();/判斷當(dāng)前的Camera是否為打開狀態(tài)if (mCameraStatus = CAMERA_DEVICE_STATUS_CLOSED) CameraLog.v(TAG, CAMERA_DEVICE_NOT_OPENED);return;/設(shè)置照片的方向mParameters.setRotation(lastOrientation);/清楚照片參數(shù)中已有的GPS數(shù)據(jù)mParameters.removeGpsData();/設(shè)置照片的GPS時間戳mParameters.setGpsTimestamp(System.currentTimeMillis() / 1000);/設(shè)置照片的位置
15、信息/判斷獲取的位置信息是否為空,為空說明在拍照時還沒有獲取到用戶當(dāng)前的位置信息if (null != loc) double lat = loc.getLatitude(); /獲取緯度double lon = loc.getLongitude(); /獲取經(jīng)度/判斷經(jīng)度和緯度是否有效boolean hasLatLon = (lat != 0.0d) | (lon != 0.0d);if (hasLatLon) mParameters.setGpsLatitude(lat); /設(shè)置照片的緯度信息mParameters.setGpsLongitude(lon); /設(shè)置照片的經(jīng)度信息mPar
16、ameters.setGpsProcessingMethod(loc.getProvider().toUpperCase(); /設(shè)置獲取位置的provider即定位的方式/設(shè)置高度獲取海拔if (loc.hasAltitude() mParameters.setGpsAltitude(loc.getAltitude(); else mParameters.setGpsAltitude(0);mCamera.setParameters(mParameters); /更新參數(shù)b、把位置信息保存到數(shù)據(jù)庫中,在保存照片時調(diào)用getCurrentLocation()方法獲取位置信息,并調(diào)用ImageM
17、anager.addImage()保存照片信息到數(shù)據(jù)庫中。1)在BaseCameraActivity.java的storeImage()方法中調(diào)用getCurrentLocation()獲取位置信息:mImageCapture.storeImage(jpegData,BaseCameraActivity.this,getCurrentLocation(),storeDir,mCameraEntryType = CAMERA_ENTRY_FROM_OTHER_APP,mCameraId);2) 在ImageCapture.java的storeImage()方法中調(diào)用ImageManager的ad
18、dImage()方法保存照片信息到數(shù)據(jù)庫中:mLastContentUri = ImageManager.addImage(context.getContentResolver(),title, dateTaken, loc,storeDir, filename, data, degree);3) 在ImageManager.java的addImage()方法中把經(jīng)度和緯度數(shù)據(jù)保存到數(shù)據(jù)庫中:/判斷位置信息是否為空if (null != location) / 寫入緯度數(shù)據(jù)values.put(Images.Media.LATITUDE, location.getLatitude();/ 寫入
19、經(jīng)度數(shù)據(jù)values.put(Images.Media.LONGITUDE, location.getLongitude();/通過ContentResolver的insert()方法把數(shù)據(jù)保存到數(shù)據(jù)庫中uri = cr.insert(Images.Media.EXTERNAL_CONTENT_URI, values);5、 結(jié)束位置服務(wù)的監(jiān)聽,在stopReceivingLocationUpdates()方法中通過調(diào)用LocationManager.removeUpdates()方法來結(jié)束監(jiān)聽:protected void stopReceivingLocationUpdates() if
20、(null = mLocationManager) return;for (int i = 0; i mLocationListeners.length; i+) try /結(jié)束監(jiān)聽,去除LocationManager的LocationListenermLocationManager.removeUpdates(mLocationListenersi); catch (Exception ex) CameraLog.v(TAG, fail to remove location listners, ignore, ex);6、在完成以上步驟后,要在Android應(yīng)用中使用位置服務(wù)還需要很重要的一步:AndroidManifest.xml中使用注冊服務(wù)的權(quán)限在相機(jī)中已經(jīng)把拍照時的經(jīng)度和緯度設(shè)置到照片中并保存至數(shù)據(jù)庫中,那么怎么把經(jīng)度和緯度轉(zhuǎn)反向編碼換成具體的地理位置,這一步在11071項目中由相冊完成,主要通過Geocoder的public list getFromL
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐飲服務(wù)題庫含參考答案
- 醫(yī)學(xué)影像檢查技術(shù)學(xué)試題庫及答案
- 中醫(yī)內(nèi)科出科試題及答案
- 急診與災(zāi)難醫(yī)學(xué)考試題目及答案
- 中級財務(wù)會計試卷及答案
- 電工安全知識試題及答案
- 近十年浙江省考試卷及答案
- 主要負(fù)責(zé)人(廣東省)考試題庫及安全員附答案
- 建筑質(zhì)檢員考試題及答案
- 技能大賽《網(wǎng)絡(luò)安全管理實踐》考試題庫(附答案)
- 2025年擔(dān)保公司考試題庫(含答案)
- 營養(yǎng)員指導(dǎo)員培訓(xùn)
- 期末模擬測試(試卷)2025-2026學(xué)年六年級語文上冊(統(tǒng)編版)
- 2025-2026學(xué)年蘇教版小學(xué)數(shù)學(xué)三年級上冊期末綜合測試卷及答案(三套)
- 服裝廠生產(chǎn)流程標(biāo)準(zhǔn)操作程序
- 2025至2030伴侶動物診斷行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 授信財務(wù)知識培訓(xùn)課件
- 師范類學(xué)生教學(xué)能力提升計劃
- 2025年中國燕麥數(shù)據(jù)監(jiān)測報告
- 地理八上期末考試試卷及答案
- 景區(qū)工作總結(jié)匯報
評論
0/150
提交評論