我正在尝试使用Cordova在javascript中制作stepcounter应用,但是pedometer.startPedometerUpdates(successHandler,onError)总是返回错误处理程序(从不成功)
我正在使用Cordova插件计步器 https://www.npmjs.com/package/cordova-plugin-pedometer 其中写道:成功处理程序在数据可用时执行,并在新数据到达时从后台线程中反复调用。
但是正如我所说的,successHandler永远不会执行,所以我认为它不会被重复调用或没有数据可使用,但是我不知道如何解决。
我知道有2个问题与我的问题很接近,但是没有有用的答案。 Cordova Plugin Pedometers How to use the pedometer plugin?
我的代码:
var app = {
// Application Constructor
initialize: function() {
document.addEventListener('deviceready', this.onDeviceReady.bind(this), false);
},
// deviceready Event Handler
//
// Bind any cordova events here. Common events are:
// 'pause', 'resume', etc.
onDeviceReady: function() {
//PEDOMETER
var successHandler = function(data) {
// pedometerData.startDate; -> ms since 1970
// pedometerData.endDate; -> ms since 1970
console.log('step');
alert("step");
alert(data.numberOfSteps + " " + data.distance);
// pedometerData.distance;
// pedometerData.floorsAscended;
// pedometerData.floorsDescended;
};
var onError = function(){
//alert("pedometer failure");
};
var successCallback = function (){
console.log("success");
alert("success");
};
var failureCallback = function (){
console.log("failure");
alert("failure");
};
pedometer.startPedometerUpdates(successHandler, onError);
//pedometer.stopPedometerUpdates(successCallback, failureCallback);
pedometer.isDistanceAvailable(successCallback, failureCallback);
pedometer.isStepCountingAvailable(successCallback, failureCallback);
}
app.initialize();
isDistanceAvailable,isStepCountingAvailable均返回成功。
我正在使用Android Lolipop 5.0在小米redmi 3上对其进行测试。
感谢您的帮助。
答案 0 :(得分:-1)
您可以尝试以下操作:
<script>
let app = {
init: function() {
pedometer.isStepCountingAvailable(function(){
//alert(""Data available);
}, function(){
alert( "Step counting is NOT available on your device");
});
let successHandler = function (pedometerData) {
alert(pedometerData.numberOfSteps);
};
pedometer.startPedometerUpdates(successHandler, onError);
function onError(etext) {
alert("error="+JSON.stringify(etext));
};
},
}
document.addEventListener('deviceready', app.init, false);
</script>