0

ユーザーが20メートル移動するたびに、ユーザーの現在の位置を確認したい.すべてアクティブ状態とバックグラウンド.アクティブ状態で実行しても問題ないことはわかっています. ios.特に知りたいのは、Appleがこのメソッドを拒否することです.しかし、ios7では大丈夫だと思います

実際には、現在の場所を取得したいと考えています。ユーザーが 1 km 以上移動した場合は、サーブ API を呼び出し、ユーザーが 20 m ごとに移動した場合は、ローカル データベースをチェックしてデータをポップアップ表示します。

アクティブ状態とバックグラウンド状態の両方でやりたいだけです。現時点では、大幅な位置変更と地域監視を使用していますが、地域監視の精度は低く、少なくとも 20m の精度が必要です。そのため、上記の方法を実行しようとしています。その方法はバッテリーの消耗が多いことを知っています。しかし、私は正確さが一番欲しいです。誰でもアイデアがあります。

4

2 に答える 2

2

アクティブ状態とバックグラウンド状態の両方のユーザーの現在の場所を取得できます。アプリは拒否されません。plist では、バックグラウンド状態でユーザーの位置情報を取得するためのリクエストを設定する必要があります。これが設定されると、ロケーション マネージャー デリゲートは呼び出しを続けます (このため、バッテリーがすぐに消耗する可能性が多くあります)。ロケーション マネージャー メソッドを 1 つのクラス/アプリケーション デリゲートに記述し、それらを再利用して、状態を簡単に確認できるようにします (ユーザーが移動するたびにユーザーの位置が自動的に更新されるため、2 点間の距離を確認でき、ユーザーが膨張に達した場合は警告を表示できます)

これが役立つことを願っています..

于 2014-04-01T04:27:53.103 に答える
1

AppDelegate.m ファイル内

- (void)applicationDidEnterBackground:(UIApplication *)application{
    UIApplication* app = [UIApplication sharedApplication];
   UIApplication *bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        [app endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    }];
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSTimer* t = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(al) userInfo:nil repeats:NO];
        [[NSRunLoop currentRunLoop] addTimer:t forMode:NSDefaultRunLoopMode];
        [[NSRunLoop currentRunLoop] run];
    });
}
-(void)al{
    yourViewController *navigation=[[yourViewController alloc]initWithNibName:@"yourViewController" bundle:nil];
    [navigation.locationManager startMonitoringSignificantLocationChanges];
}

次のリンクも試してください

于 2014-04-01T05:18:05.597 に答える