我有使用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"
});
但我不喜欢抛出异常的想法。
答案 0 :(得分:0)
我在从应用程序退出之前做了两次控制。因此,用户可以按一次,并且将出现带有“再次按下以退出”的文本的吐司,并且第二次按下 - >退出。
这是我的服务:
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);
希望这会对你有所帮助:)。
答案 1 :(得分:0)
在Ionic / Cordova上禁用后退按钮
$ionicPlatform.registerBackButtonAction(null, 101);