Какая техника iOS GPS (CLLocationManager) лучше всего подходит для экономии заряда батареи?

Я написал приложение GPS для iOS 10 некоторое время назад. Я получил его до такой степени, что он стабилен и работает, как ожидалось, и теперь я хочу пойти на приемы экономии заряда батареи. Прямо сейчас приложение отправляет GPS-координаты каждые 5 минут, но я могу быть уверен в том, как часто я отправляю GPS-координаты, если они отправляются не слишком часто. Моему приложению также требуется настройка местоположения GPS "лучший" или "10 м", которая, как я знаю, потребляет много энергии, но я не могу использовать настройку 3 км в соответствии с моими требованиями (которая, как я знаю, позволит сэкономить больше энергии).

Из того, что я собираю и читаю документы и играю с кодом, чтобы заставить его работать, кажется, что есть 2 метода:

  1. set pausesLocationUpdatesAutomatics = YES в сочетании с UNLocationNotificationTrigger
  2. allowDeferredLocationUpdatesUntilTraveled: тайм-аут:

Номер 2, по-видимому, не работает вообще на основе этой статьи в iOS 10 и 11.

Номер 1 дает мне спорадические результаты, когда я регистрирую его на своем сервере. Иногда это работает, иногда я получаю одну точку GPS посреди ниоткуда (не видя паузы или сообщения журнала возобновления), а затем позже она начинает работать, в других случаях кажется, что она вообще не работает.

Иногда я вижу 2 паузы в одну и ту же секунду.

В других случаях я видел, как это возобновляло местоположения спина к спине (минуты), не видя сообщения журнала паузы А иногда я вижу сообщение журнала паузы и через несколько минут (или немного позже) возобновляет отправку GPS, не видя сообщения журнала "возобновить".

- (void) setGPSBatterySavingTrigger
{
    if (IS_IOS_10_OR_LATER && ([g_prefs getGPSAuthStatus] == kCLAuthorizationStatusAuthorizedAlways))
    {
        CLLocationCoordinate2D center = CLLocationCoordinate2DMake(g_locMgr.getLastLocation.latitude, g_locMgr.getLastLocation.longitude);
        CLRegion *region = nil;
        float radius_m = 150.0;
        region = [[CLCircularRegion alloc] initWithCenter:center radius:radius_m identifier:@"pauseLocationsCenter"];

        if (!region) {
            [logger log:TSERVLOG :@"pause radius failed at radius <%f>", radius_m];
            return;
        }
        region.notifyOnEntry = NO;
        region.notifyOnExit = YES;

        UNLocationNotificationTrigger *trigger = [UNLocationNotificationTrigger
                                                  triggerWithRegion:region repeats:NO];

        UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
        content.title = PROG_NAME;
        content.body = @"GPS Restarted";
        //content.sound = [UNNotificationSound soundNamed:nil];

        UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@"GPSTextNotify" content:content trigger:trigger];

        [[UNUserNotificationCenter currentNotificationCenter] removeAllPendingNotificationRequests];
        [[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError *error)
         {
             if (error.code)
             {
                 [logger log:TSERVLOG :@"UNUserNotificationCenter addRequest FAILED <%@>", error.localizedDescription];
             }
         }];
    }
}

- (void) locationManagerDidPauseLocationUpdates:(CLLocationManager *)manager
{
    [logger log:TSERVLOG :@"===== JME GPS PauseLocationUpdates at <%@> <%f, %f>",
            [mydate getCurrentDateTimeStr], self.getLastLocation.latitude, self.getLastLocation.longitude];

    [self setGPSBatterySavingTrigger];
}

- (void) locationManagerDidResumeLocationUpdates:(CLLocationManager *)manager
{
    [logger log:TSERVLOG :@"===== GPS ResumeLocationUpdates at <%@> <%f, %f>",
            [mydate getCurrentDateTimeStr], self.getLastLocation.latitude, self.getLastLocation.longitude];
}

Итог вопросы:

  1. Кто-нибудь был в состоянии использовать любой из них для надежной работы от батареи + GPS в iOS 10+?
  2. Если нет, то какую комбинацию вы делали, чтобы заставить его работать 100% времени, экономя время автономной работы?
  3. Я скучаю по другой технике, которая работает? (ПРИМЕЧАНИЕ: мои требования не могут использовать настройку 3 км)

Спасибо за ваш вклад!

0 ответов

Другие вопросы по тегам