-3

StackOverflow 開発者の皆様、Info.plistプログラム可能な Yes または No を設定する方法について質問があります。そのため、私のアプリは Backgroung Locaton Update をサポートしています。しかし、すべての iOS 開発者が知っているように、それはナッツのようにバッテリーを消耗させます。したがって、iPhone が接続されているかどうかを検出し、バックグラウンド処理のみをサポートし、接続されていない場合は [locationmanger startMonitoringSignificantLocationChanges]; を使用できます。ご協力いただきありがとうございます。

4

1 に答える 1

7

元の質問への回答

OPは場所の更新を停止する方法を尋ねましたが、答えは

CLLocationManager方法がありstopUpdatingLocation:ます。

新しい質問への回答

私の理解では、プロパティ リストはバックグラウンドで位置情報サービスを使用する意図を宣言するものであり、実行時のアクセシビリティに関しては読み取り専用です。したがって、 や のようなメソッドを介して制御するのが適切なアプローチのよう CLLocationManagerです。stopUpdatingLocation:startMonitoringSignificantLocationChanges:

CLLocationManagerを使用してバッテリー通知に登録することにより、バッテリー監視でバッテリーの状態に基づいて制御できます。

[ [ UIDevice currentDevice ] setBatteryMonitoringEnabled:YES ];
[ [ NSNotificationCenter defaultCenter ] addObserver:self selector:@selector(
      reactToBatteryStatus) name:UIDeviceBatteryLevelDidChangeNotification object:nil ];

これにより、電話が接続されているかどうかを判断できます。ただし、Apple のガイドラインに従って、必要な場合にのみバッテリー通知に登録する必要があります。したがって、登録を解除するには、使用します

[ [ UIDevice currentDevice ] setBatteryMonitoringEnabled:NO ];
[ [ NSNotificationCenter defaultCenter ] removeObserver:self name:
  UIDeviceBatteryLevelDidChangeNotification object:nil ];

次に、バッテリーの状態に基づいて、必要なことを行うことができます。

+ (void) reactToBatteryStatus {
    UIDeviceBatteryState batteryState = [ UIDevice currentDevice ].batteryState;
    if ( batteryState == UIDeviceBatteryStateCharging || batteryState == UIDeviceBatteryStateFull )
    {
        // Device is plugged in.
    }
}
于 2012-11-19T06:50:17.303 に答える