2

現在私はプロジェクトに取り組んでいますが、その要件は、より多くのバッテリー寿命を消費するため、gpsを使用せずにwifiネットワークまたはセルラーネットワークを使用して200m間隔ごとに現在の位置情報、特に緯度と経度の値を取得することです。

これはiOSの最新バージョンで可能ですか。

何かアイデアがあれば、教えてください、ありがとうございます。

4

6 に答える 6

1

ロケーションマネージャプロトコルリファレンス

https://developer.apple.com/library/mac/#documentation/CoreLocation/Reference/CLLocationManagerDelegate_Protocol/CLLocationManagerDelegate/CLLocationManagerDelegate.html

1.Appdelegateで

#import <CoreLocation/CoreLocation.h>

@interfaceファイル内

CLLocationManager *locationManager;
@property (nonatomic, retain) CLLocationManager *locationManager;

プロトコルCLLocationManagerDelegateプロトコルを追加します。

2.これらの関数を.mで実装します。

@synthesize locationManager;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{   
    self.locationManager = [[[CLLocationManager alloc] init] autorelease];  
    self.locationManager.delegate = self;
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    self.locationManager.distanceFilter = 1.0;
    [self.locationManager startUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
  // Show an alert or otherwise notify the user
}
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{
}
- (void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error
{
}

:最初にシミュレータで現在の場所をデバッグする場合は、[デバッグ]--->[場所]--->[カスタムの場所]で設定します。

于 2013-02-05T10:26:44.013 に答える
1

を調べてCLLocationManagerください。ユーザーがどこにいるかがわかります。

.h

#import <CoreLocation/CoreLocation.h>
@property(nonatomic,retain) CLLocationManager *locationManager;

.m

- (void)viewDidLoad
{
        locationManager = [[CLLocationManager alloc] init];
        locationManager.delegate = self;

        //let the user know the purpose
        locationManager.purpose = @"Enable location services";
        locationManager.distanceFilter = kCLDistanceFilterNone;
        locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
        NSLog(@"User latitude: %f",locationManager.location.coordinate.latitude);
        NSLog(@"User longitude: %f",locationManager.location.coordinate.longitude);

        [locationManager startUpdatingLocation];
}
于 2013-02-05T10:29:48.720 に答える
1

CLLocationManager の startUpdatingLocation である 200m ごとに位置情報を取得する唯一の方法です。ただ、バッテリーの消費が激しいです。

ただし、場所が変更されたときに場所を取得する方法が少し異なります。

CLLocationManager の startMonitoringSignificantLocationChanges。

ここにリンクがあります

于 2013-02-05T10:31:49.623 に答える
0
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {


[locationManager stopUpdatingLocation];
[locationManager stopMonitoringSignificantLocationChanges];    
[self performSelector:@selector(stopUpadateLocation)];


CLLocation *location = [locationManager location];
CLLocationCoordinate2D coord;
coord=[location coordinate];
NSLog(@"coord %f %f", coord.latitude, coord.longitude);
NSString *urlString = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%f,%f&output=json", newLocation.coordinate.latitude, newLocation.coordinate.longitude];

NSURL *url = [NSURL URLWithString:urlString];
NSString *locationString = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

NSDictionary *dic=[locationString JSONValue];
NSLog(@"locationString:%@",locationString );
[strAddr setString:[AppUtility removeNull:[NSString stringWithFormat:@"%@",[[[dic valueForKey:@"Placemark"] objectAtIndex:0] valueForKey:@"address"]]]];
[txtNear setText:strAddr];

}

- (void)startUpdateLocation{
[locationManager startUpdatingLocation];

}

- (void)stopUpadateLocation{
[locationManager stopUpdatingLocation];
[locationManager stopMonitoringSignificantLocationChanges];

}

于 2013-02-05T10:53:54.760 に答える
0

その要件は、バッテリー寿命が長くなるため、GPSを使用せずにwifiネットワークまたはセルラーネットワークを使用して、200m間隔ごとに現在の位置情報、特に緯度と経度の値を取得することです

のドキュメントにCLLocationManagerは、距離と GPS ハードウェアについて次のように書かれています。

... ロケーション イベントの望ましい精度を 1 キロメートルに設定すると、ロケーション マネージャーは、GPS ハードウェアをオフにして、WiFi またはセル無線のみに依存する柔軟性を得ることができます。

200 メートル未満の場合は、おそらくここで独自のソリューションを展開する必要があります。

于 2013-02-05T10:35:27.583 に答える
0

startMonitoringSignificantLocationChangesWi-Fi またはセルラー ネットワークのみを使用する Core Location メソッドを使用する必要があります。

于 2013-02-05T11:17:23.670 に答える