2016-03-25 1 views
0

iOSデバイスをビーコン(私のiPhone5と言うことがあります)として使用しようとします。これは別のiOSデバイスで検出されるはずです。 両方のデバイスがフォアグランドにある場合、私のiPadは私のiPhoneで生成されたビーコン信号を正しく検出することができます。私didRangeBeaconsデリゲートメソッドから、私は、バックグラウンドモードでの私のiPhone(ビーコン)(画面がアクティブではない)、私はできないですときに私は、ビーコン情報iOSデバイスで生成されたバックグラウンドビーコンソースを検出することが可能です

[CLBeacon (uuid:<__NSConcreteUUID 0x124e483b0> AD065817-291B-4422-BD59-CBBFBDB81F17, major:9, minor:6, proximity:2 +/- 0.81m, rssi:-56)] 

を記録し

func locationManager(manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], inRegion region: CLBeaconRegion) { 
     if beacons.count > 0{ 
      print(beacons) 
     } 
} 

ました私のiPadからビーコン信号を検出するには、このシナリオのためのソリューションはありますか?私はオンラインで多くの研究をしましたが、明るいものを見つけることができませんでした。

答えて

0

ビーコンの監視は、iOSがアプリのサービスを実行しているため、アプリがバックグラウンドのときに機能します。ただし、レンジングは、アプリがフォアグラウンドにあるときにのみ機能します。短期のバックグラウンドレンジングで十分でない場合は、プロジェクト設定のCapabilityタブでBackground Modesオプションを有効にし、Info.plistにをlocationに設定する必要があります。

0

はい、背景にビーコンを配置できます。

func extendBackgroundRunningTime() { 
    if backgroundTask != UIBackgroundTaskInvalid { 
     // if we are in here, that means the background task is already running. 
     // don't restart it. 
     return 
    } 
    NSLog("Attempting to extend background running time") 
    var self_terminate: Boolean = true 
    self.backgroundTask = UIApplication.sharedApplication().beginBackgroundTaskWithName("DummyTask", expirationHandler: {() -> Void in 
     NSLog("Background task expired by iOS") 
     if self_terminate != nil { 
      UIApplication.sharedApplication().endBackgroundTask(backgroundTask) 
      self.backgroundTask = UIBackgroundTaskInvalid 
     } 
    }) 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {() -> Void in 
     NSLog("Background task started") 
     while true { 
      NSLog("background time remaining: %8.2f", UIApplication.sharedApplication().backgroundTimeRemaining) 
      NSThread.sleepForTimeInterval(1) 
     } 
    }) 
} 

あなたが実際に必要としない:通常のiOSはあなたが最大3分にあなたの背景目覚めの時間を延長するために、このコードを使用することができます、しかし、あなたがバックグラウンドに移動した後、あなたは10秒のためにこれを行うことができますこれのバックグラウンドモード。 info.plistにNSLocationAlwaysUsageDescriptionを設定する必要があります。お使いの携帯電話は、あなたが探して設定したCLBeaconRegionsの範囲になります。私はthis appを使用してiBeaconsでテストすることができます。なぜなら、シミュレーションや検出機能を提供しているからです。そこには多くのビーコンシミュレータがありますが、実際のイーサネットを購入することもできます。

私はできるだけ余分にバックグラウンドでレンジングを使用しようとしています。なぜなら、このプロセスは過度に行われるとバッテリーの消費が大きくなるからです。バッテリ寿命を節約するためにレンジングを通じて提供される近接性やRSSIなどの情報を知る必要がない状況では、監視を使用してください。

0

モニタリングビーコンは、フォアグラウンドでもバックグラウンドでもうまく機能します。 モニタリング

地域を監視すると、デバイスが地域によって定義されたビーコンの範囲に入るか、または終了するかをアプリが知ることができます。 2つの入り口で設置されたオーディオガイドアプリケーションとビーコンを備えた博物館を想像してみてください。このアプリケーションは、両方のビーコンを含む地域を監視しています(「すべての入口ビーコン」地域と考える)、ユーザーが博物館に入るたびに通知されます。その後、ユーザーにオーディオガイド機能についての通知を通知します。モニタリングは、よりきめ細かで測距、ビーコンの範囲の-とアウトに動きを検出することができますしながら

測距

。範囲内にあるビーコンのリストをそれぞれの近似値と共に返します。博物館の例に戻ると、「展示物の近くにあるすべてのビーコン」を想像してください。オーディオガイドアプリは、この地域のすべてのビーコンをスキャンして、最も近いビーコンを確認することができます。各ビーコンは特定の展示会に関連付けられているため、アプリはユーザーのコンテキストに関連するアートワークの説明を再生します。

レンジングは、アプリの実行中にのみ有効です。ほとんどの場合、ユーザーがアプリを使用していることを意味します。これは、「アプリケーションの使用中にあなたの場所にアクセスする」権限だけが必要であることを意味します。

ビーコンの永続的な背景範囲が必要な場合は、アプリケーションのバックグラウンドモード機能(具体的には、ロケーション更新モード)を有効にする必要があります。

startRangingBeaconsInRegionをバックグラウンドで動作させるには、CLLocationManagerのstartUpdatingLocation(つまり、アプリケーションにCLLocationManagerとESTBeaconManagerの両方が必要です)を介して標準ロケーションアップデートを開始する必要があります。

注:iOS 9では、CLLocationManagerのallowsBackgroundLocationUpdatesプロパティもtrueに設定する必要があります。

(community.estimote.comから) https://community.estimote.com/hc/en-us/articles/203914068-Is-it-possible-to-use-beacon-ranging-in-the-background-