如何在 iOS 應(yīng)用中添加位置信息
最近要在 iOS 應(yīng)用中添加位置信息, 需要滿(mǎn)足的需求如下:
- 應(yīng)用在前臺(tái)時(shí)能夠獲取位置信息;
- 通過(guò)切換、 Home 按鍵將應(yīng)用切換到后臺(tái)時(shí),停止獲取位置信息;
- 應(yīng)用程序在前臺(tái)運(yùn)行, 直接鎖定屏幕時(shí),能夠繼續(xù)獲取位置信息;
接下來(lái)逐步實(shí)現(xiàn)這三個(gè)需求。
獲取設(shè)備位置信息
在 iOS 上獲取位置信息是很容易的, 網(wǎng)上的資料也很多, 我的代碼如下:
// make sure location service is enabled.
if (!CLLocationManager.LocationServicesEnabled) {
return;
}
// create a new location manager
CLLocationManager locationManager = new CLLocationManager {
DistanceFilter = CLLocationDistance.FilterNone,
DesiredAccuracy = 1000
};
// check to work with both ios 6 and older.
if (UIDevice.CurrentDevice.CheckSystemVersion(6, 0)) {
locationManager.LocationsUpdated += OnLocationsUpdated;
}
else {
locationManager.UpdatedLocation += OnLocationUpdated;
}
locationManager.StartUpdatingLocation();
第一次運(yùn)行時(shí), 系統(tǒng)會(huì)彈出應(yīng)用要使用位置的對(duì)話(huà)框, 點(diǎn)擊確認(rèn)即可。
在鎖屏情況下繼續(xù)更新 GPS 信息
當(dāng)程序運(yùn)行時(shí), 用戶(hù)直接鎖定屏幕, 會(huì)調(diào)用 AppDelegate 的 DidEnterBackground 方法, 但是對(duì)于 iOS 應(yīng)用來(lái)說(shuō), 用戶(hù)切換程序或者點(diǎn)擊 Home 按鈕是, 也會(huì)調(diào)用這個(gè)函數(shù), 這兩種操作的區(qū)別在當(dāng)前應(yīng)用實(shí)例(UIApplication)的狀態(tài), 當(dāng)用戶(hù)切換程序或者點(diǎn)擊 Home 按鈕時(shí), 應(yīng)用的狀態(tài)是 UIApplicationStateBackground , 而鎖定屏幕時(shí), 應(yīng)用狀態(tài)是 UIApplicationStateInactive , 使用下面的代碼可以區(qū)分這兩種情況:
public override void DidEnterBackground(UIApplication application) {
if (application.ApplicationState == UIApplicationState.Background) {
Log.Debug("App send to background by home button/switching to other app, stop upload location.");
}
else if (application.ApplicationState == UIApplicationState.Inactive) {
Log.Debug("App send to background by locking screen, contine upload location, but change mode to powersave mode");
}
}
對(duì)于鎖屏情況下繼續(xù)更新位置信息的需求, 就很容易達(dá)到了, 只要在 DidEnterBackground 函數(shù)中檢查應(yīng)用的狀態(tài), 當(dāng)狀態(tài)為 UIApplicationBackground 是才停止更新位置, 代碼如下:
public override void DidEnterBackground(UIApplication application) {
// switch to other app or click home button, stop update location
if (application.ApplicationState == UIApplicationState.Background) {
locationManager.StopUpdatingLocation();
}
}
注意: 根據(jù) Apple 的文檔, DidEnterBackground 函數(shù)大約有 5 秒鐘的執(zhí)行時(shí)間, 如果超過(guò) 5 秒鐘還沒(méi)有從這個(gè)函數(shù)返回, 應(yīng)用將會(huì)異常退出, 因此不要再這個(gè)函數(shù)中進(jìn)行耗時(shí)的操作。
當(dāng)應(yīng)用切換到前臺(tái)或者解鎖時(shí), 會(huì)調(diào)用 AppDelegate 的 WillEnterBackground 方法, 只要在這個(gè)方法中繼續(xù)更新位置即可:
public override void WillEnterForeground(UIApplication application) {
// app switch to foreground, continue to update location.
locationManager.StartUpdatingLocation();
}
注意: 同樣, WillEnterForeground 大約有 5 秒鐘的執(zhí)行時(shí)間, 因此也不要在這個(gè)函數(shù)中進(jìn)行耗時(shí)的操作。
為應(yīng)用添加后臺(tái)位置權(quán)限
要真正能在鎖屏狀態(tài)下繼續(xù)更新位置, 需要修改 info.plist ,增加后臺(tái)位置權(quán)限。 找到項(xiàng)目中的 info.plist 文件, 雙擊打開(kāi), 并切換到 Source 標(biāo)簽, 如下圖所示:

然后添加 Required background modes 屬性項(xiàng), 并將這個(gè)屬性類(lèi)型設(shè)置為 Array , 并為這個(gè)屬性添加一個(gè)子項(xiàng) Location-based information , 最終如下圖所示:

也可以直接把下面的代碼添加到 info.plist 文件中, 效果是一樣的。
<key>UIBackgroundModes</key> <array> <string>location</string> </array>
以上就是如何在 iOS 應(yīng)用中添加位置信息的詳細(xì)內(nèi)容,更多關(guān)于iOS 應(yīng)用中添加位置信息的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
iOS11.3以下modal中input光標(biāo)錯(cuò)位的解決方法
這篇文章主要介紹了iOS11.3以下modal中input光標(biāo)錯(cuò)位的解決方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
iOS中只讓textField使用鍵盤(pán)通知的實(shí)例代碼
本文通過(guò)實(shí)例代碼給大家介紹了OS中只讓textField使用鍵盤(pán)通知的操作方法,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒加載,需要的的朋友參考下吧2017-07-07
詳解iOS中多個(gè)網(wǎng)絡(luò)請(qǐng)求的同步問(wèn)題總結(jié)
這篇文章主要介紹了詳解iOS中多個(gè)網(wǎng)絡(luò)請(qǐng)求的同步問(wèn)題總結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
舉例講解iOS應(yīng)用開(kāi)發(fā)中hitTest觸摸事件的編寫(xiě)方法
這篇文章主要介紹了舉例講解iOS應(yīng)用開(kāi)發(fā)中hitTest觸摸事件的編寫(xiě)方法,重點(diǎn)講解了兩個(gè)view之間的事件傳遞,需要的朋友可以參考下2016-04-04
解決Alamofire庫(kù)在iOS7下設(shè)置Head無(wú)效的問(wèn)題
本文主要介紹Alamofire庫(kù)在iOS下設(shè)置Head,這里通過(guò)代碼實(shí)例解決不同版本的IOS系統(tǒng)出現(xiàn)的問(wèn)題,有需要的小伙伴可以參考下2016-07-07
iOS使用UICountingLabel實(shí)現(xiàn)數(shù)字變化的動(dòng)畫(huà)效果
本文主要介紹了iOS使用UICountingLabel實(shí)現(xiàn)數(shù)字變化動(dòng)畫(huà)效果的方法,具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2016-12-12

