35

注意: この質問は、Apple がモーション検出ハードウェアと関連する API を iOS SDK に導入する前に最初に投稿されました。ただし、この質問への回答は依然として関連性があります。


ユーザーのランニングやウォーキングを追跡する iPhone iOS アプリを作成しています。ユーザーのランニングとウォーキングの記録された結果が正直であることは非常に重要です。車を使用しているときに不正行為をしている可能性がある (または誤ってトラッカーをオンにしたままにしている) ユーザーを捕まえる方法が必要です。

ユーザーが車を運転しているか、車に乗っているかを確認するために、最初にこれら 2 つのチェックを考えましたが、どちらもユーザーが車に乗っているかどうかを (ある程度) 判断することはできません。

  1. 次の方法でユーザーの現在の速度を確認します。ユーザーが時速 20 マイルよりも速く移動している場合、ユーザーは車に乗っていると推測できます。

    - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
          CLLocation *recentLocation = [locations lastObject];
          recentLocation.speed; //If speed is over 20 MPH, assume the user is not on their feet.
    

    ただし、これが本当に良いチェックかどうかはわかりません。以前よりも速く走る人が記録されているからです。これは良いチェックですか、それとも他のものを使用する必要がありますか?

  2. Core Motion Frameworkで提供される Accelerometer および Motion API を使用して、ユーザーが加速している速度を判断します。ユーザーが特定の速度を超えて加速する場合、ユーザーは車で移動していると推測できます。

これらの仮定は正しいですか?私の本当の質問はこれだと思います:ユーザーが車で移動しているかどうかを検出するより良い方法はありますか?もしそうなら、どのように? . そうでない場合、これらのチェックはこのケースに適していますか、それとも実際にはそれほど高速な一部のユーザーにとっては迷惑でしょう? CoreMotion はこれを行うのに適切な API ですか?


編集: 新しい iPhone 5S M7 コプロセッサは、より正確な動き検出を提供します。新しい M7 API の使用方法を説明できる人はいますか?

4

4 に答える 4

30

位置データから運動状態を推測する際の知恵 (または知恵の欠如) に関するすべてのアドバイスは、依然として適用されます。しかし、Core Motion と M7 に関する更新については...

はい、M7、M8、M9 などのモーション コプロセッサ (*) を搭載したデバイスで Core Motion を使用して、ユーザーが運転しているかどうかを示すことができます。

  1. オブジェクトを作成しCMMotionActivityManager(そのクラス メソッドisActivityAvailableを使用して M7(+) 機能があるかどうかを判断した後)、アクティビティの更新を開始するか、最近のアクティビティを照会します。
  2. CMMotionActivity返されたオブジェクトのプロパティをチェックしautomotiveて、ユーザーが車に乗っている/乗っていたと iOS が認識しているかどうかを確認します。
  3. ステップ3はありません。

ただし、GPS の推論と同様に、この情報も割り引いて考える必要があります。CoreMotion API は、ユーザーのアクティビティに関する iOS の最善の推測を提供しますが、それが 100% 正確であるという保証はありません。(たとえば、電車に乗ることが としてカウントされるかどうかはわかりませんautomotive。また、さまざまなアクティビティの種類が相互に排他的ではないことにも注意してください。) 興味のあるアクティビティの種類をアプリで確認する方が、不要なものを除外します。


(*) M7 デバイスは、A7 SoC を搭載したデバイスです。iPhone 5s、iPad Air、iPad mini 2。M8 は A8、M9 は A9 などです。要するに、iPhone 5c を除く、2013 年秋以降に導入されたすべての iOS デバイスです。

于 2013-11-20T18:19:14.540 に答える
3

CLLocationベース チェックは、取得できる唯一の信頼できる情報です。Need to find Distance using Gyro+AccelerometerでAli が指定しているように、長時間にわたって速度と位置を見つけることは役に立ちません。積分された加速度値は 0.5 ~ 2 秒後にドリフトし始め、再び較正する機会はありません。

ユース ケースによっては、ウサイン ボルトの 44.72 km/h (27.79 mph) よりも多くの問題が見られます。

  1. トンネル、地下駐車場などの GPS 信号のない地域...
  2. GPS のエラー。ドイツアルプスでの6時間の追跡ツアーを覚えています。これがアプリがそれについて考えたことです:-)
    水上を時速920kmで歩く
  3. すでに述べたように、ユーザーが車、電車、地下鉄、バスなどに乗っているかどうかはわかりません...そして、彼が自分で運転しているのか、それとも単に共同運転しているのかはわかりません-これが重要な場合.
于 2013-07-26T07:26:19.367 に答える