iOS 4以降、ロケーションアップデートを受信していて、バックグラウンドで正常に動作しているフィットネスアプリがあります。アプリがバックグラウンドに移動したときに現在位置アップデートが停止していますアプリを切り替える、またはデバイスをロックする)機能やバックグラウンド権限の変更に関する通知はありませんでした。誰が何が起こっているのか分かりますか?iOS 10でiOS Location Managerのバックグラウンドアップデートが停止しました
私の場所のセットアップはかなり基本的なものです:
if (!self.locationManager) {
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.distanceFilter = kCLDistanceFilterNone;
self.locationManager.activityType = CLActivityTypeFitness;
self.locationManager.pausesLocationUpdatesAutomatically = TRUE;
}
// request permissions on iOS 8+
if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
[self.locationManager requestWhenInUseAuthorization];
}
次に、このコールバックは、更新を受信:アプリがフォアグラウンドにあるとき
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
DLog(@"didUpdateToLocation");
}
すべてが良いです。バックグラウンドに移動すると、コンソールに次のメッセージが表示されます。
/BuildRoot/Library/Caches/com.apple.xbs/Sources/ExternalAccessory/ExternalAccessory-353.22.1/EAAccessoryManager.m:__52-[EAAccessoryManager _checkForConnectedAccessories:]_block_invoke-785 ending background task
更新が停止します。私はアプリをフォアグラウンドに持ってきて、もう一度やり直す。
私は直接EAAccessoryManager
を使用しておらず、それが何であるか推測できるだけです。私はBluetoothLE
フレームワークを使用して心拍数モニタからデータを受信していますが、この機能を無効にすると(BluetoothLE
オブジェクトをインスタンス化しなくても)、問題は残ります。
私のUIBackgroundModesは、Pebbleウォッチの接続性を持っているので、location
,external-accessory
およびbluetooth-central
に設定されていました。私はbluetooth-peripheral
を追加しようとしましたが、それは役に立たなかった。私もNSLocationWhenInUseUsageDescription
とNSBluetoothPeripheralUsageDescription
が設定されています。
外部アクセサリのバックグラウンドモードは必要ありません。外部アクセサリーフレームワークを使用している場合を除きます。 ios9以降、https://developer.apple.com/reference/corelocation/cllocationmanager/1620568-allowsbackgroundlocationupdatesを実行しているようには見えない 'allowsBackgroundLocationUpdates'を設定する必要があります。ただし、ios9より前にアプリを最後に再構築した場合、古い動作 – Paulw11
で壮大だったよそれはそれです!私はiOS 8以降のアプリを更新していないので、iOS 9の変更についてはわかりませんでした。これを回答として追加すると、私はそれを受け入れます。 – arlomedia