3

У меня есть одна функциональность, в которой, когда приложение убито или прекращено, я должен получить широту и долготу местоположения.Местоположение не обновляется во время ходьбы, когда приложение убито

Когда я еду на своем автомобиле, я получаю широту и долготу, когда приложение убито/прекращено.

Но когда я начинаю ходить в течение нескольких минут, я не получаю широту и долготу в приложении, убитом/прекращенном.

Ниже приведена моя логика.

+ (CLLocationManager *)sharedLocationManager { 
static CLLocationManager *_locationManager; 

@synchronized(self) { 
    if (_locationManager == nil) { 
     _locationManager = [[CLLocationManager alloc] init]; 
     _locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation; 
     _locationManager.allowsBackgroundLocationUpdates = YES; 
     _locationManager.pausesLocationUpdatesAutomatically = NO; 
     _locationManager.activityType = CLActivityTypeOther; 
     _locationManager.distanceFilter = kCLDistanceFilterNone; 
    } 
} 
     return _locationManager; 
} 

- (id)init { 
    if (self==[super init]) { 
    //Get the share model and also initialize myLocationArray 
    self.shareModel = [LocationShareModel sharedModel]; 
    self.shareModel.myLocationArray = [[NSMutableArray alloc]init]; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationEnterBackground) name:UIApplicationDidEnterBackgroundNotification object:nil]; 
} 
    return self; 
} 

-(void)applicationEnterBackground{ 
CLLocationManager *locationManager = [LocationTracker sharedLocationManager]; 
locationManager.delegate = self; 
[locationManager stopMonitoringSignificantLocationChanges]; 

if(IS_OS_8_OR_LATER) { 
    [locationManager requestAlwaysAuthorization]; 
} 
[locationManager startMonitoringSignificantLocationChanges]; 

//Use the BackgroundTaskManager to manage all the background Task 
self.shareModel.bgTask = [BackgroundTaskManager sharedBackgroundTaskManager]; 
[self.shareModel.bgTask beginNewBackgroundTask]; 
} 

Выше мой Locationmanager класс, который я звоню из AppDelegate

И в AppDelegate.m файле, я написал как ниже

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

UIAlertView * alert; 

//We have to make sure that the Background App Refresh is enable for the Location updates to work in the background. 
if([[UIApplication sharedApplication] backgroundRefreshStatus] == UIBackgroundRefreshStatusDenied){ 

    alert = [[UIAlertView alloc]initWithTitle:@"" 
             message:@"The app doesn't work without the Background App Refresh enabled. To turn it on, go to Settings > General > Background App Refresh" 
            delegate:nil 
          cancelButtonTitle:@"Ok" 
          otherButtonTitles:nil, nil]; 
    [alert show]; 

}else if([[UIApplication sharedApplication] backgroundRefreshStatus] == UIBackgroundRefreshStatusRestricted){ 

    alert = [[UIAlertView alloc]initWithTitle:@"" 
             message:@"The functions of this app are limited because the Background App Refresh is disable." 
            delegate:nil 
          cancelButtonTitle:@"Ok" 
          otherButtonTitles:nil, nil]; 
    [alert show]; 

} else{ 
    self.locationTracker = [[LocationTracker alloc]init]; 
    [self.locationTracker startLocationTracking]; 

     //Send the best location to server every 60 seconds 
     //You may adjust the time interval depends on the need of your app. 
    if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey]) { 

     NSTimeInterval time = 10; 
     self.locationUpdateTimer = 
     [NSTimer scheduledTimerWithTimeInterval:time 
             target:self 
             selector:@selector(updateLocation) 
             userInfo:nil 
             repeats:YES]; 
    } 


} 

return YES; 
} 

Любые советы ?? Спасибо ...

+0

Вы делали связанные изменения в фоновом режиме? –

+0

@ReshmiMajumder: Да, я включил фоновые режимы для определения местоположения и фона – Nirav

+0

Требуется ли интернет или 3G для обновления местоположения во время ходьбы? @ReshmiMajumder – Nirav

ответ

0

Вы запрашиваете «Значимые локации». Мои исследования и опыт работы с API и связанным с ними мониторингом регионов заключаются в том, что с его использованием сотовых вышек вместо GPS разрешение ОЧЕНЬ грубое. Мы попытались использовать его на расстоянии 30 метров, и это было неустойчиво. Мы натолкнули его на 100 метров, и это было лучше. Похоже, что большинство людей предлагают 200 метров для мониторинга региона. Не удивительно, что в течение некоторого времени ходьба вряд ли вызовет «Значительное местоположение», так как 200 метров - это долгий путь в течение нескольких минут.

+0

Но есть и другие приложения, такие как «Zenly», которые постоянно обновляют местоположение, даже если вы обычно ходите нормально – Nirav

+0

не используйте значительное место; использовать GPS. За яблоко: «Служба определения местоположения с существенным изменением предоставляет обновления только тогда, когда произошли значительные изменения в расположении устройства, например, 500 метров или более». https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html –

+0

использовать GPS, но как? вы можете показать мне пример? – Nirav

 Смежные вопросы

  • Нет связанных вопросов^_^