如何確定Android設備是否已移動?通過「移動」,我的意思是,如果它躺在桌子上,有人拿起它,我可以檢測到它已經移動。我正在考慮使用陀螺儀傳感器,但我不確定這是否是最好的解決方案。確定設備是否已移動
0
A
回答
1
如果你想檢測最小的移動,我不認爲你有很多選擇。陀螺儀/加速度傳感器是最好的選擇。即使在那裏你也需要添加一些過濾器,因爲加速度計有一些搖擺。
GPS幾乎不夠準確,無法用來注意桌面之間的移動。
監測接近傳感器可能有些用處,但是任何阻塞都會觸發它,而且它確實不會告訴您手機是否正在移動。
如果您想消耗大量電池,請使用相機。通過過濾器對一些輸入進行流式傳輸,以確定圖像是否正在移動。
1
你可以使用加速度計來解決這個問題。如果設備上沒有外力,則加速計傳感器值的矢量和將僅爲重力。如果重力矢量發生變化,那麼就有一個力量。如果這個力量很大,你可以假設設備正在移動。
如果矢量和等於+/- +/-閾值的重力,它穩定地躺在桌子上。
代碼看起來像下面,(注:以下MovingAverage手段移動的加速度計的50個樣本平均)
bool IsDeviceStill(const sensors_event_t& event)
{
if (event.type == SENSOR_TYPE_ACCELEROMETER) {
const vec3_t acc(event.data);
/*Avoiding square root for better performance*/
float vecsum = acc.x*acc.x + acc.y*acc.y + acc.z*acc.z;
vec3_t variance = mVariance->movingAverage(vecsum);
vec3_t var = mOffsetAvg->movingAverage(abs(variance.x - vecsum));
ALOGE("Current variance x:%f AvgVarianc:%f ",variance.x,var.x);
if(var.x < 2) /*Threshold is 2, Standard deviation should less than 2 */
mDeviceStill = true;
else
mDeviceStill = false;
}
ALOGE("%s Device is still:%d\n", __FUNCTION__, mDeviceStill);
return mDeviceStill;
}
相關問題
- 1. 如何確定它是否是使用PHP的移動設備?
- 2. 移動設備的MAC地址是否可以輕鬆確定?
- 3. 如何確定Dropbox是否已安裝在iOS設備上?
- 4. 確定當前設備是否
- 5. 確定設備是否具有GPU
- 6. 確定設備是否使用HTC SenseUI
- 7. 確定設備是否在linux
- 8. 如何確定clearcase元素是否已被移動/重命名?
- 9. 確定網站是否使用JavaScript在移動設備上進行響應
- 10. 如何確定設備是否空閒或設備是否插入?
- 11. 瞭解Android設備是否已移動,而不是位置或速度
- 12. 是否可以在html/css中定位手持移動設備?
- 13. 樹枝 - 確定是否移動代理
- 14. 確定當前設備上是否存在活動?
- 15. 跨iOS設備的浮點確定性是否確定?
- 16. 頁腳是不是在移動設備上正確顯示
- 17. cudaEvent設備是否特定?
- 18. 如何確定設備是否已從睡眠模式內部被喚醒onResume
- 19. Meteor - React - FlowRouter如何基於設備(PC或移動設備)正確重定向
- 20. 檢測是否鍵是在移動設備
- 21. 確定是否已準備好mysqli_result實例?
- 22. 我們是否可以確定哪個SIM卡已被移除的Android設備的運營商/運營商?
- 23. Unity設備移動
- 24. 如何確定客戶端是否是觸摸設備
- 25. Libgdx InputProcessor - 確定你是否已經從keyDown中移除
- 26. 確定移動設備的圖像質量
- 27. 如何確定C#中移動設備屏幕的方向?
- 28. 如何檢測瀏覽器是否爲移動設備並在正常和移動設備之間切換?
- 29. 使用Javascript來檢查地圖中心是否移動了移動設備
- 30. std :: streams是否已經可移動?
嗨,你是否有什麼解決辦法嗎?我正在嘗試使用後臺服務來做同樣的事情,但在關閉屏幕時加速度計不起作用。 – Nitish 2014-07-17 03:09:17