我有使用ionicframework和cordova完成的应用程序。在我的应用程序中,我要求如果用户按下后退按钮,那么我需要忽略它。但只有在用户第三次按下它之后才能关闭app。
以前的项目是使用phonegap和jquery完成的,相同的代码也可以。当我抛出一个异常时,我做了一个小的解决方法,然后它不应该关闭应用程序。
document.addEventListener("backbutton", function (e) {
if (new Date() - firstDateClick > 1000) {
firstDateClick = new Date();
totalClicks = 1;
} else {
totalClicks++;
if (totalClicks >= 3) {
var answer = confirm('Are You Sure You Want Exit');
if (answer) {
var service = angular.injector(['ng', 'starter.services']).get('DanceService');
service.logEvent("exit")
.then(function () {
alert('exit1')
if (navigator.app) {
navigator.app.exitApp();
}
else if (navigator.device) {
navigator.device.exitApp();
}
})
} else {
totalClicks = 1;
}
}
}
throw "ignore"
});
但我不喜欢抛出异常的想法。
在从应用程序注销之前我做了两次控制。因此,用户可以按一次,并且将出现一个Toast,文本“再次按下退出”,第二次按 - >退出。
这是我的服务:
var deregisterFunction = null;
return {
disableBack: disableBack,
registerAction: registerAction,
goHome: goHome,
goBack: goBack,
deregisterAction: deregisterAction,
closeApp: closeApp
};
function disableBack() {
deregisterFunction = angular.copy($ionicPlatform.registerBackButtonAction(null, 101));
}
function registerAction(cb, priority) {
deregisterFunction = angular.copy($ionicPlatform.registerBackButtonAction(cb, priority));
}
function deregisterAction() {
if (deregisterFunction) {
deregisterFunction();
}
goBack();//default behaviour
}
function goHome() {
deregisterFunction = angular.copy($ionicPlatform.registerBackButtonAction(function() {
$state.go('app.home');
}, 101));
}
function goBack() {
deregisterFunction = angular.copy($ionicPlatform.registerBackButtonAction(function() {
$ionicHistory.goBack();
}, 101));
}
function closeApp() {
deregisterFunction = angular.copy($ionicPlatform.registerBackButtonAction(function() {
ionic.Platform.exitApp();
}, 101));
}
这是我的utils服务:
var service = {
logoutToast: logoutToast,
resetToastCount: resetToastCount
};
var toastCount = 0;
return service;
function resetToastCount() {
toastCount = 0;
}
function logoutToast() {
switch (toastCount) {
case 0:
$cordovaToast.show('Press again to log out', 'short', 'bottom');
toastCount++;
break;
case 1:
toastCount = 0;
//logout
break;
default:
$cordovaToast.show('Error', 'short', 'bottom');
}
}
}
}());
所以在我的控制器中我有这个用于注册我的服务的动作:
$scope.$on('$ionicView.afterEnter', backButtonService.registerAction(utils.logoutToast, 101));
这用于重置我想要的计数:
$scope.$on('$ionicView.afterEnter', utils.resetToastCount());
这用于在导航时取消注册我的操作:
$scope.$on('$stateChangeStart', backButtonService.deregisterAction);
希望这会对你有所帮助:)
禁用Ionic / Cordova上的后退按钮
$ionicPlatform.registerBackButtonAction(null, 101);