我可以在Android上检测物理与虚拟磁场传感器吗?

问题描述:

'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

刚才试过这个:''在清单中。它不会破坏我的设备(有一个指南针)或模拟器上的任何东西,它不会提供包含或不包含指南针的选项。我用Moto E将它发送给我的测试人员。我们将看看'模拟'指南针是否计数。 –

的使用的想法:<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