0

私は 2 つのアプリ (1 つはバックグラウンドで iBeacon を登録およびスキャンし、範囲を指定しない) と、それ以外のアプリを持っています。これらのアプリはどちらも基本的に似ていますが、最初に iBeacons が有効になっている点が異なります。

// location manager config
    + (CLLocationManager *)sharedLocationManager {
static CLLocationManager *_locationManager;

@synchronized(self) {
    if (_locationManager == nil) {
        _locationManager = [[CLLocationManager alloc] init];
    //_locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
        _locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers;
        _locationManager.pausesLocationUpdatesAutomatically = NO;
        if ([_locationManager respondsToSelector:@selector(allowsBackgroundLocationUpdates)]){
            _locationManager.allowsBackgroundLocationUpdates = YES;
        }
    }
}
return _locationManager;
}

    - (void)startMonitoringItem:(Item *)item {
    CLBeaconRegion *beaconRegion = [self beaconRegionWithItem:item];
    CLLocationManager *locationManager = [LocationTracker sharedLocationManager];
    [locationManager startMonitoringForRegion:beaconRegion];
}

- (void)stopMonitoringItem:(Item *)item {
    CLBeaconRegion *beaconRegion = [self beaconRegionWithItem:item];
    CLLocationManager *locationManager = [LocationTracker sharedLocationManager];
    [locationManager stopMonitoringForRegion:beaconRegion];
}

私は最初のアプリ内に約 100 個の iBeacons を登録し、iPhone 6 と iPhone 6 Plus で両方のアプリを実行しました。100 個以上の iBeacons の近くで同じ OS バージョンを実行し、両方ともブルートゥースを有効にしました。

私は入場イベントと退場イベントにのみ興味があり、基本的にこれらの呼び出しの両方を最初のアプリに実装しました。Bluetooth を有効にした両方の iPhone を iBeacons の近くに置いておくだけで、約 14 時間テストを実行しました。

設定メニューでバッテリーの状態を確認したところ、最初のアプリは 2 番目のアプリよりも最大で 1% 多くバッテリーを消費していました (例: 1 番目のアプリ: 25%、2 番目のアプリ: 24%)。これは両方のデバイスで同じです。iOS によって制御されるブルー トゥース スキャン アルゴリズムは、バッテリを節約するために最適化される必要があるため、これは予期された動作です。

ただし、私のクライアントのデバイスでは、1 番目のアプリは 2 番目のアプリよりも 5 倍のバッテリーを消費します (例: 1 番目のアプリ: 10%、2 番目のアプリ: 2%)。

彼の Bluetooth 設定を確認したところ、彼の iPhone が約 8 台の他のデバイスとペアリングされていることがわかりました。

だから私の質問はこれです。他のデバイスとペアリングすると、iBeacons をスキャンしているだけでも、最初のアプリでバッテリーの消耗が大幅に増加しますか? はいの場合、ペアリングされたデバイスを無視して iBeacons をスキャンするようにアルゴリズムによって最適化できる方法はありますか。

iOS のドキュメントをよく読み、stackoverflow を参照しましたが、これまでのところ満足のいく答えは見つかりませんでした。

どんなアドバイスでも大歓迎です!

更新: 例についてはスクリーンショットを参照してください

バッテリー消費率

上のスクリーンショットでは、1 番目と 2 番目のアプリのバッテリー使用率は、私のデバイスではほぼ同じです。ただし、クライアントのデバイス (他の 8 台のデバイスとペアリングされている) では、最初のアプリは通常、過去 24 時間と過去 7 日間の両方で、2 番目のアプリのバッテリー使用率の 5 倍 (例: 10% から 2%) でした。 . 彼のデバイスでは、両方のアプリがほぼ同じ時間実行されていました。これは初めてのことではありません。

4

1 に答える 1

1

はい、Bluetooth ペアリング、特に従来の Bluetoothは、iOS のバックグラウンドでビーコンをスキャンするよりもはるかに多くのバッテリーを使用します。

アプリの外部で行われるペアリングについてできることは何もありません。 Apple の iOS アプリはサンドボックス化されているため、一般的なシステム設定 (Bluetooth のオン/オフ、テザリングやスピーカーなどの Bluetooth ペアリングなど) や他のアプリの動作 (アプリ固有の目的で Bluetooth デバイスとペアリングするアプリなど) に影響を与えることはできません。 )

肝心なのは、あなたが説明したバッテリー使用量は、アプリのビーコン スキャンが原因ではないということです。ペアリングが原因です。クライアントのデバイスから 1 つ目のアプリをアンインストールすると、デバイスは、アプリがまったくインストールされていない場合と同様の速度でバッテリーを消耗するはずです。

于 2015-12-05T18:39:32.677 に答える