下面的代码是一个cordova android sms访问权限插件代码。它工作正常。
在我尝试调用我的this.getSMS()
函数时,它正在通过错误
setTimeout(() => {
this.holders.dissmissLoadingCustom();
platform.ready().then(() => {
var permissions = cordova.plugins.permissions;
permissions.hasPermission(permissions.READ_SMS, checkPermissionCallback, null);
function checkPermissionCallback(status) {
if(!status.hasPermission) {
var errorCallback = () => {
console.log("invoking the errorCallback");
alert('READ_SMS permission is not turned on');
}
permissions.requestPermission(
permissions.READ_SMS,
(status) => {
console.log("invoking status");
if(!status.hasPermission) {
console.log("invoke !status.hasPermission");
errorCallback();
}
else{
console.log("invoking else part !status.hasPermission");
this.getSMS();//this line through error
}
},
errorCallback);
}
}
});
}, 10000);
如果用户点按允许,那么我正在尝试拨打我的
this.getSMS()
,如上面的代码所示。 如果用户拒绝,那么我只是收到错误回调。
我不知道我做错了什么。
答案 0 :(得分:0)
您已将checkPermissionCallback
定义为常规功能。 this
关键字指向该函数,而不是指定它的实际类。
setTimeout(() => {
this.holders.dissmissLoadingCustom();
platform.ready().then(() => {
var permissions = cordova.plugins.permissions;
permissions.hasPermission(permissions.READ_SMS, (status)=>checkPermissionCallback(status), null);//use arrow to call
function checkPermissionCallback(status) {
if(!status.hasPermission) {
var errorCallback = () => {
console.log("invoking the errorCallback");
alert('READ_SMS permission is not turned on');
}
permissions.requestPermission(
permissions.READ_SMS,
(status) => {
console.log("invoking status");
if(!status.hasPermission) {
console.log("invoke !status.hasPermission");
errorCallback();
}
else{
console.log("invoking else part !status.hasPermission");
this.getSMS();//this line through error
}
},
errorCallback);
}
}
});
}, 10000);
或者您可以在功能定义之前将this
保存到另一个变量或使用bind
。