iPhoneでObjective-Cを使用してGPSをオフにする
質問
プログラムでiPhoneのGPSをオフにする方法を知っている人はいますか? CLLocationManagerを使用して自分の場所の3つの読み取りを取得したら、次のコードのように場所の更新を停止します。
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
if((newLocation.horizontalAccuracy > 0.0f) &&
(newLocation.horizontalAccuracy < 7000.0f) ){
if(self.locations.count > 3){
[self.locationManager stopUpdatingLocation];
}
[self.locations addObject:newLocation];
}
しかし、ユーザーが私のアプリを使用してバッテリーを消費している間、GPSがオンのままになっているようです。必要なのは、正確な読み取りを取得できるように場所を3回読み取り、GPSをシャットダウンすることだけです。 Objective-CでGPSをシャットダウンする方法を知っている人はいますか?
解決
stopUpdatingLocationは、ロケーションマネージャーにハードウェアをシャットダウンするオプションを提供しますが、それは保証されません。誰もそれを必要としないときに、ハードウェアをシャットダウンすることになっています。実際には、予想どおりに機能するようです。
stopUpdatingLocationが呼び出されることはありませんか?上記のスニペットでは、コードがその呼び出しに決して到達しないことは不合理に見えません。
他のヒント
次のことを行うために追加の行が必要かどうか疑問に思います:
[locationManager stopUpdatingLocation];
locationManager.delegate=nil;
ロケーションマネージャを停止します。これは私が使用するものであり、多くの場所でこれらの2行が一緒になっています。幸運を祈ります。
Appleのドキュメントによると、位置情報の精度が1キロメートルを超える場合、ロケーションマネージャーはGPSハードウェアをオフにします:
たとえば、ロケーションイベントの精度を1キロメートルに設定すると、ロケーションマネージャーは、GPSハードウェアをオフにして、WiFiまたは携帯無線のみに依存する柔軟性を得ることができます。 GPSハードウェアをオフにすると、電力を大幅に節約できます。 CLLocationクラス参照 からp>
標準的な(重要ではない)場所の変更の追跡のみを使用する必要があることに注意してください。
サードパーティのアプリケーションはハードウェア設定を変更することは想定されていないので、これはできないと思います。
stopUpdateLocationメソッドには、目的の効果が必要です。それがまったく呼び出されているかどうかを試しましたか(行にブレークポイントを設定することでこれを行うことができます)。
私と一緒に、GPSを動かしていたのはユーザーの位置を示すマップインスタンスでした。上記のすべてを運なしで試してみようとする人へのヒントかもしれません。
stopGPS()関数は次のとおりです。
-(void) stopGPS
{
NSLog(@"Stopgps");
myMap.delegate = nil;
myMap.showsUserLocation = NO;
myMap = nil;
[locationManager stopMonitoringSignificantLocationChanges];
[locationManager stopUpdatingHeading];
[locationManager stopUpdatingLocation];
locationManager.delegate = nil;
locationManager = nil;
}