2016-08-24 100 views
1

'Moto E'設備沒有磁場傳感器。但他們似乎用GPS來模擬它。但是,當然,只有在你移動的時候纔有效。我寧願知道它是這樣做的,所以我可以禁用某些功能,或警告用戶。我可以在Android上檢測物理與虛擬磁場傳感器嗎?

我似乎無法找到像使用其他許多設備一樣的方法,因爲即使仿真了傳感器「存在」。

對於這個問題,這個模型也沒有陀螺儀。然而FusedSensors似乎工作得很好(雖然可能不如其他設備)。

感謝您的任何意見! 戴夫

+0

「'Moto E'設備沒有磁場傳感器」 - 嚴重嗎? 「因爲傳感器即使仿真也存在」 - 您在尋找什麼特定的傳感器?這是什麼特定的Moto E? – CommonsWare

+0

Moto E 2nd Gen.我只想檢測它是否有真正的'Sensor.TYPE_MAGNETIC_FIELD'。請參閱[鏈接]上的摩托羅拉規格(http://www.motorola.com/we/products/moto-e-gen-2)。與Droid模型相比,請參閱[鏈接](http://www.motorola.com/us/products/moto-z-droid-edition)。 Moto E的老闆報告說我的導航應用程序,如果你沒有移動,顯示0作爲指南針讀數。與其他應用程序(如「GPS Essentials」)也有此問題。 –

+0

剛纔試過這個:'<使用功能 android:name =「android.hardware.sensor.compass」 android:required =「true」/>'在清單中。它不會破壞我的設備(有一個指南針)或模擬器上的任何東西,它不會提供包含或不包含指南針的選項。我用Moto E將它發送給我的測試人員。我們將看看'模擬'指南針是否計數。 –

回答

2

的使用的想法:<uses-feature android:name="android.hardware.sensor.compass" android:required="true" />

在清單

似乎沒有任何效果可言。

但是,下面的代碼實際上工作!

PackageManager manager = getPackageManager(); 
boolean hasCompass = manager.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS); 
if (!hasCompass) 
{ 
    Toast toast = Toast.makeText(this, "WARNING: DEVICE HAS NO COMPASS", Toast.LENGTH_LONG); 
    toast.show(); 
} 

我想給信貸這在後pointtofuture [提問]:How to make sure an android device application supports hardware feature

我要指出,我想這對「摩托è第二代」(沒有指南針),和三星Galaxy S7 Edge(有指南針),它是一致的。 AndroidStudio仿真器都顯示爲具有指南針,但仿真器設置不允許選擇或取消選擇該硬件功能(它適用於GPS和其他一些功能)。如果仿真器具有羅盤模擬將會很好。

Dave

+0

好分析!這就是說,我不會依賴所有提供僞造的'TYPE_MAGNETIC_FIELD'傳感器的製造商,並且說他們沒有指南針功能。我不太確定此設備是如何通過Google Play兼容性測試的,因爲Android 5.0(及更高版本)的兼容性定義文檔「必須準確報告每個android.content.pm.PackageManager類中傳感器的存在與否」和「務必通過SensorManager.getSensorList()和類似方法返回支持的傳感器的精確列表「,後者在這裏被違反。 – CommonsWare

+0

有趣的是,至少在Moto E上,PackageManager正確地說沒有指南針。但是,您可以註冊TYPE_MAGNETIC_FIELD傳感器事件的偵聽器。由於Moto E不是我的,所以我不能輕易分辨出它是否正在發生事件。雖然老闆告訴我其他的指南針應用程序確實會做出迴應,我可能會要求他用事件計數器測試一個調試版本。 –

+0

「使用'uses-feature'的想法...在清單中似乎沒有任何影響「 - 在'adb'上安裝應用程序時,這不會被檢查,包括從IDE進行部署。所以,我不會排除這一點,我拿起其中一個,當我通過'SensorManager'上的'getSensorList(Sensor.TYPE_ALL)'轉儲可用傳感器列表時,我沒有看到磁場傳感器出現,當我調用'getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD)'時,我得到'null'。所以,AFAICT,這款設備運行正常 – CommonsWare

相關問題