0

GPS をバックグラウンドで実行し続けるのに問題があります。

アプリがバックグラウンドのときにGPSを実行し続けることに成功しましたが、時々停止します。建物に入ると音が止まり、そこに2〜3時間とどまっていることに気づきました。「停止」とは、位置情報サービスのアイコンがまだオンになっているにもかかわらず、GPS ポイントを受信しないことを意味します。その後、外出すると、アプリケーションをフォアグラウンドにするまでポイントを受け取りません。

pausesLocationUpdatesAutomatically プロパティを NO に設定しました。

そのため、GPS信号が弱い場所に入るまで、すべてが正常に機能します。そのエリアから出ると、GPS信号が良好になったのでポイントを受け取る必要がありますが、もうポイントを受け取りません。

そして、アプリケーションがバックグラウンドに入ったときの私のコードは次のとおりです。

- (void)applicationWillResignActive:(UIApplication *)application
{
    NSLog(@"[AppDelegate]: Application entering in background!");
    if(doesUserWantGPSTracking)
    {
    [self stopGPS];

    UIApplication *app = [UIApplication sharedApplication];

    bgTask = [app beginBackgroundTaskWithExpirationHandler:
              ^{

                    dispatch_async(dispatch_get_main_queue(),
                    ^{

                        if( bgTask != UIBackgroundTaskInvalid )
                        {
                            [app endBackgroundTask:bgTask];
                            bgTask = UIBackgroundTaskInvalid;
                        }

                    });

              }];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
        ^{

            [self startGPS];

            dispatch_async(dispatch_get_main_queue(), ^{

                if( bgTask != UIBackgroundTaskInvalid )
                {
                    [app endBackgroundTask:bgTask];
                    bgTask = UIBackgroundTaskInvalid;
                }

            });

        });
    }
    }
4

3 に答える 3

3

情報 plist に追加します。Required background modes

1つの項目をApp registers for location updates

更新しました:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocationAs iosは、距離が大幅に変化したときに戻ります。変更する必要があると思います:

// Set the movement threshold.
locationManager.distanceFilter = 500; // meters
于 2013-03-20T10:28:20.657 に答える
0

建物の中にいると、GPS の位置情報が得られないことがよくあります。GPS には空への無料ビューが必要です。位置を取得できない場合、もちろんアプリをバックグラウンドで実行し続ける唯一の理由がないため、ios は次の GPS 位置 (窓の近くまたは屋外) を取得するまでアプリを非アクティブにします。

さらに、GPS を停止します。バックグラウンドで [self stopGPS] なぜ? 生かせて!

于 2013-03-27T01:33:10.847 に答える