start() 方法中的 cordova-plugin-device-motion 异常

cordova-plugin-device-motion Exception in start() method

我的 Android 5.1.1 Phone(荣誉 6)上的 cordova 插件 cordova-plugin-device-motion 有问题。这是我的代码:

$scope.options = {
    frequency: 100, 
    deviation : 25  
};
$scope.startWatching = function() {
    $scope.watch = $cordovaDeviceMotion.watchAcceleration($scope.options);
    $scope.watch.then(null, function(error) {
        console.log('Error');
    },function(result) {
        //success callback
    });
};

在 watchAcceleration() 内部,调用了原生的 start() 方法。我得到了有效的结果(成功回调被调用),但是我得到了以下 logcat 输出:


06-09 12:32:13.634: I/SensorManagerFlow(6623): registerListenerImpl
06-09 12:32:13.634: I/SensorManagerFlow(6623): java.lang.Exception
06-09 12:32:13.634: I/SensorManagerFlow(6623):  at android.hardware.SystemSensorManager.registerListenerImpl(SystemSensorManager.java:118)
06-09 12:32:13.634: I/SensorManagerFlow(6623):  at android.hardware.SensorManager.registerListener(SensorManager.java:775)
06-09 12:32:13.634: I/SensorManagerFlow(6623):  at android.hardware.SensorManager.registerListener(SensorManager.java:682)
06-09 12:32:13.634: I/SensorManagerFlow(6623):  at org.apache.cordova.devicemotion.AccelListener.start(AccelListener.java:157)
06-09 12:32:13.634: I/SensorManagerFlow(6623):  at org.apache.cordova.devicemotion.AccelListener.execute(AccelListener.java:107)
06-09 12:32:13.634: I/SensorManagerFlow(6623):  at org.apache.cordova.CordovaPlugin.execute(CordovaPlugin.java:98)
06-09 12:32:13.634: I/SensorManagerFlow(6623):  at org.apache.cordova.PluginManager.exec(PluginManager.java:133)
06-09 12:32:13.634: I/SensorManagerFlow(6623):  at org.apache.cordova.CordovaBridge.jsExec(CordovaBridge.java:59)
06-09 12:32:13.634: I/SensorManagerFlow(6623):  at org.apache.cordova.engine.SystemExposedJsApi.exec(SystemExposedJsApi.java:41)
06-09 12:32:13.634: I/SensorManagerFlow(6623):  at com.android.org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
06-09 12:32:13.634: I/SensorManagerFlow(6623):  at com.android.org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:53)
06-09 12:32:13.634: I/SensorManagerFlow(6623):  at android.os.Handler.dispatchMessage(Handler.java:102)
06-09 12:32:13.634: I/SensorManagerFlow(6623):  at android.os.Looper.loop(Looper.java:135)
06-09 12:32:13.634: I/SensorManagerFlow(6623):  at android.os.HandlerThread.run(HandlerThread.java:61)

然后我通过以下方式停止录制:

$scope.watch.clearWatch();

然后重新开始:

$scope.startWatching();

我在 logcat 输出中再次遇到同样的错误。但现在也不再调用成功回调。

如果有人能帮我解释为什么会这样,那就太好了:)

该错误非常特定于我的设备。我在另一台 android 5.1.1 设备、一台 android 6 设备和一台 Iphone 上对其进行了测试。它在这些设备上运行良好。 这是我的 phone:

最重要功能的列表
System
Device Model: Huawei Honor 6
Model: H60-L04
Installed RAM: 3 GB LPDDR3

CPU
SoC Model: HiSilicon Kirin 920
Core Architecture: 4x ARM Cortex-A7 @ 1305 MHz
4x ARM Cortex-A15 @ 1708 MHz
Instruction Set: 32-bit ARMv7
Supported ABIs: armeabi-v7a, armeabi
Supported 32-bit ABIs: armeabi-v7a, armeabi

Android
Android Version: 5.1.1 (Lollipop)
API Level: 22
Rooted Device: No
Kernel Architecture: armv7l
Kernel Version: 3.10.74-gc69e6c2
Google Play Services Version: 9.0.83 (238-121911109)

Sensors
LSM330 3-axis Accelerometer:
iNemo Linear Acceleration sensor:

在花了足够的时间找出问题后,我只能得出结论,这个问题与插件无关。

Android 版本升级应该可以解决这个问题,因为它看起来更多的是传感器问题,而不是实际的应用程序问题。