如何確定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. 確定httpServeltRequest是否來自移動設備或網絡
- 4. 如何檢查移動設備是否已註冊
- 5. 確定設備是否是ARM64
- 6. 如何確定Dropbox是否已安裝在iOS設備上?
- 7. OpenCL:確定設備是否已在運行
- 8. window.print()是否適用於移動設備?
- 9. 如何確定iOS設備是停止還是移動(駕駛)
- 10. 確定客戶端設備(PC或移動設備)
- 11. 確定設備是否在linux
- 12. 確定設備是否具有GPU
- 13. 確定設備是否使用HTC SenseUI
- 14. 確定當前設備是否
- 15. 使用window.Touch查找當前設備是否爲移動設備
- 16. 如何確定clearcase元素是否已被移動/重命名?
- 17. 確定網站是否使用JavaScript在移動設備上進行響應
- 18. 確定線程是否已啓動
- 19. 如何確定設備是否空閒或設備是否插入?
- 20. 瞭解Android設備是否已移動,而不是位置或速度
- 21. 是否可以在html/css中定位手持移動設備?
- 22. 移動設備是更大
- 23. 在Windows Phone 8設備中使用加速度計以確定設備是否在移動
- 24. 樹枝 - 確定是否移動代理
- 25. 確定是否Windows 8的可安裝設備驅動程序
- 26. 我可以確定/如何檢測設備是否有振動?
- 27. 確定當前設備上是否存在活動?
- 28. 跨iOS設備的浮點確定性是否確定?
- 29. 確保認證通過移動設備
- 30. 頁腳是不是在移動設備上正確顯示
嗨,你是否有什麼解決辦法嗎?我正在嘗試使用後臺服務來做同樣的事情,但在關閉屏幕時加速度計不起作用。 – Nitish 2014-07-17 03:09:17