2014-09-12 39 views
12

我搜索一種方式來檢測手機的移動,而不管用戶拿着手機的方式。無論設備旋轉如何,檢測移動

一些例子:

  • 我感興趣的垂直運動(如使用者將手機上)「忽略」如果手機奠定了桌子上或握在手中(也許倒) 。
  • 也對水平移動感興趣(如用戶將手機推離身體)也「忽略」用戶如何握住手機。

背景是,我想識別用戶是否將電話拉出口袋(如拉30-40釐米,也有一些釐米水平)。

我想爲此我必須得到userAcceleration和態度的組合。但我沒有找到正確的數學......

+0

你想檢測搖動嗎? – Vidhi 2014-09-12 10:30:08

+1

不可以。我想要檢測「空間」中的移動,例如將手機拉到或前面幾釐米,而不管用戶拿着手機的方式。 – Thorsten 2014-09-12 10:53:03

+0

「我認爲我必須從用戶加速和態度中得到一個組合,但我沒有找到正確的數學。」你能澄清這個說法嗎? (即告訴我們你已經嘗試了什麼) – 2016-05-17 01:53:28

回答

0

如果您的應用程序處於前臺,您可能可以做到這一點。您可以使用UIDeviceOrientationLandscapeLeftUIDeviceOrientationLandscapeRightUIDeviceOrientationPortraitUpsideDown/UIDeviceOrientationPortrait來檢測手機認爲它處於哪個風景,並從那裏調整您如何計算移動。

手機拿起時可能會發生移位。加速度計的這種變化可能會讓你看到手機如何移動。這需要大量的測試。我會設置您的練習應用程序,並獲取屏幕方向更改的大量數據,以及加速度計如何隨每次更改而變化並查找趨勢。

1

不確定你的意思是「正確的數學」。但我會讀出加速度計並總結所有3個方向(x/y/z)的絕對值。這會爲您提供一個單獨的加速數字,與手機方向或移動方向無關。

甚至更​​好的是計算RMS加速度,即求和x/y/z加速度的平方並計算總和的平方根。

這種方法的明顯缺點是它沒有提供關於運動方向的信息。您可以添加一些閾值或濾波來區分單個線性運動與搖動(例如,通過測量兩次加速事件之間的時間)。

此外,您可以確定高度的變化(這與手機方向無關),但我懷疑是否可以精確測量30 ... 40釐米的差異。