欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何在 iOS 應(yīng)用中添加位置信息

 更新時間:2021年02月26日 09:11:22   作者:張志敏  
這篇文章主要介紹了如何在 iOS 應(yīng)用中添加位置信息,幫助大家更好的理解和學(xué)習(xí)使用ios,感興趣的朋友可以了解下

最近要在 iOS 應(yīng)用中添加位置信息, 需要滿足的需求如下:

  • 應(yīng)用在前臺時能夠獲取位置信息;
  • 通過切換、 Home 按鍵將應(yīng)用切換到后臺時,停止獲取位置信息;
  • 應(yīng)用程序在前臺運行, 直接鎖定屏幕時,能夠繼續(xù)獲取位置信息;

接下來逐步實現(xiàn)這三個需求。

獲取設(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();

第一次運行時, 系統(tǒng)會彈出應(yīng)用要使用位置的對話框, 點擊確認即可。

在鎖屏情況下繼續(xù)更新 GPS 信息

當程序運行時, 用戶直接鎖定屏幕, 會調(diào)用 AppDelegate 的 DidEnterBackground 方法, 但是對于 iOS 應(yīng)用來說, 用戶切換程序或者點擊 Home 按鈕是, 也會調(diào)用這個函數(shù), 這兩種操作的區(qū)別在當前應(yīng)用實例(UIApplication)的狀態(tài), 當用戶切換程序或者點擊 Home 按鈕時, 應(yīng)用的狀態(tài)是 UIApplicationStateBackground , 而鎖定屏幕時, 應(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");
 }
}

對于鎖屏情況下繼續(xù)更新位置信息的需求, 就很容易達到了, 只要在 DidEnterBackground 函數(shù)中檢查應(yīng)用的狀態(tài), 當狀態(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í)行時間, 如果超過 5 秒鐘還沒有從這個函數(shù)返回, 應(yīng)用將會異常退出, 因此不要再這個函數(shù)中進行耗時的操作。

當應(yīng)用切換到前臺或者解鎖時, 會調(diào)用 AppDelegate 的 WillEnterBackground 方法, 只要在這個方法中繼續(xù)更新位置即可:

public override void WillEnterForeground(UIApplication application) {
 // app switch to foreground, continue to update location.
 locationManager.StartUpdatingLocation();
}

注意: 同樣, WillEnterForeground 大約有 5 秒鐘的執(zhí)行時間, 因此也不要在這個函數(shù)中進行耗時的操作。

為應(yīng)用添加后臺位置權(quán)限

要真正能在鎖屏狀態(tài)下繼續(xù)更新位置, 需要修改 info.plist ,增加后臺位置權(quán)限。 找到項目中的 info.plist 文件, 雙擊打開, 并切換到 Source 標簽, 如下圖所示:

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

也可以直接把下面的代碼添加到 info.plist 文件中, 效果是一樣的。

<key>UIBackgroundModes</key>
<array>
 <string>location</string>
</array>

以上就是如何在 iOS 應(yīng)用中添加位置信息的詳細內(nèi)容,更多關(guān)于iOS 應(yīng)用中添加位置信息的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論