#javascript #android #capacitor #ionic5
#javascript #Android #конденсатор #ionic5
Вопрос:
В моем приложении ionic для Android я использую аппаратную кнопку возврата Android для перехода на предыдущую страницу и, наконец, для выхода из приложения, но она вообще не работает, даже я пытался проверить, работает ли событие щелчка или нет, но безуспешно. Я прошел через множество решений, но это было для ionic 3 и 4, что также не является рабочим решением. Пожалуйста, предложите, есть ли у вас какое-либо решение этой проблемы
вот мой код: файл app.component.ts
import { Component, QueryList, ViewChild, ViewChildren } from '@angular/core';
import { AlertController, IonRouterOutlet, Platform } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';
import { ActivatedRoute, Router } from '@angular/router';
import { AuthService } from './services/auth.service';
import { CommonService } from './services/common.service';
import { environment } from 'src/environments/environment';
import {Location} from '@angular/common';
@Component({
selector: 'app-root',
templateUrl: 'app.component.html',
styleUrls: ['app.component.scss']
})
export class AppComponent {
displayUserData: any;
fname: string;
lname: string;
skill: string;
photo: string;
assetURL: string;
role_id: number;
interval: any;
@ViewChildren(IonRouterOutlet) routerOutlets: QueryList < IonRouterOutlet > ;
lastTimeBackPress = 0;
timePeriodToExit = 2000;
notification_count: any;
constructor(
private platform: Platform,
private splashScreen: SplashScreen,
private router: Router,
private statusBar: StatusBar,
private authService: AuthService,
private commonService: CommonService,
public alertController: AlertController,
private location: Location,
private activeRoute: ActivatedRoute,
) {
this.assetURL = environment.assetsUrl;
this.initializeApp();
this.loadData();
this.interval = setInterval(() => {
this.loadData();
}, 3000);
}
ngOnDestroy() {
if (this.interval) {
clearInterval(this.interval);
}
}
initializeApp() {
this.platform.ready().then(() => {
this.statusBar.styleDefault();
this.splashScreen.hide();
// this.router.navigateByUrl('splash')
this.backButtonEvent();
});
}
logout(){
// this.authService.logout();
this.LogoutConfirm();
}
async LogoutConfirm() {
const alert = await this.alertController.create({
message: 'Do you want to sign out?',
buttons: [{
text: 'No',
role: 'cancel',
cssClass: 'secondary',
handler: (blah) => {}
}, {
text: 'Yes',
handler: () => {
this.authService.logout();
}
}]
});
await alert.present();
}
loadData(){
this.authService.userData.subscribe((res: any)=>{
this.displayUserData = res;
if(this.displayUserData){
this.getDetails(this.displayUserData.token);
this.getOtherData(this.displayUserData.token);
}
})
}
getDetails(token){
this.commonService.getDetails(token).subscribe((res:any)=>{
if(res.status == 'success'){
const data = res.data;
if(data){
this.fname = data.fname;
this.lname = data.lname;
this.skill = this.displayUserData.role == 2 ? 'Makeup Designer' : data.skill;
this.photo = data.photo;
this.role_id = data.role_id
}
}else{
// this.toastService.presentToast(res.message, 'top');
}
}, (error: any) => { }
)
}
getOtherData(token){
this.commonService.getOtherData(token).subscribe((res:any)=>{
if(res.status == 'success'){
this.commonService.changeNotifyCount(res.data.notification_count);
}else{ }
}, (error: any) => { console.log(error) }
)
}
backButtonEvent() {
this.platform.backButton.subscribeWithPriority(0, () => {
console.log(this.router.url);
this.routerOutlets.forEach(async(outlet: IonRouterOutlet) => {
if (this.router.url != '/index/home') {
await this.router.navigate(['/index/home']);
} else if (this.router.url === '/index/home') {
if (new Date().getTime() - this.lastTimeBackPress >= this.timePeriodToExit) {
this.lastTimeBackPress = new Date().getTime();
this.presentAlertConfirm();
} else {
navigator['app'].exitApp();
}
}
});
});
}
async presentAlertConfirm() {
const alert = await this.alertController.create({
message: 'Do you want to exit the app?',
buttons: [{
text: 'Cancel',
role: 'cancel',
cssClass: 'secondary',
handler: (blah) => {}
}, {
text: 'Exit',
handler: () => {
navigator['app'].exitApp();
}
}]
});
await alert.present();
}
}