プロジェクトに取り組んでいて、問題が発生している:
ハードウェア戻るボタンリロードアプリケーション(Angularルーターを使用しています)。
アプリケーションを終了するための私のコード:
_ ionViewDidEnter(){
this.subscription = this.platform.backButton.subscribe(()=>{
navigator['app'].exitApp();
});
}
ionViewWillLeave(){
this.subscription.unsubscribe();
}
_
同じロジックが他のアプリケーションで動作している間。しかし、このアプリケーションでは、アプリケーションの再読み込みは終了していません。
PS:私はplatform.ready()
にも入れようとしましたが、うまくいきませんでした。
解決済み:
SideMenu/Tabsの @ rtpHarry テンプレートによる言及には、アプリケーションがルートページにそれを再ロードするように導く履歴があります。履歴をクリアすることで解決できました。
ionViewDidEnter(){
navigator['app'].clearHistory();
}
ルートページで履歴を消去するだけで、ハードウェアの[戻る]ボタンは、アプリケーションを再ロードする代わりに閉じます。
IONIC 4を使用すると、ソフトボタンとハードバックボタン間の競合を処理するために開発された新しいメソッドsubscribeWithPriority
があります。以下のようにコードを変更してみてください:
_ this.platform.backButton.subscribeWithPriority(1, () => {
navigator['app'].exitApp();
});
_
subscribeWithPriority()
は、イベントの実行後にイベントの伝播を停止します。高い優先度でサブスクライブし、デフォルトのナビゲーションではなく優先ナビゲーションを実行すると、期待どおりに機能します。
詳細については、次のリファレンスドキュメントをご覧ください:
https://github.com/ionic-team/ionic/commit/6a5aec8b5d76280ced5e8bb8fd9ea6fe75fe6795
https://medium.com/@aleksandarmitrev/ionic-hardware-back-button-nightmare-9f4af35cbfb
更新:
this.navCtrl.pop() / this._navCtrl.navigateBack('HomeScreen')
を呼び出し、exitApp
を呼び出します。注:タブとSideMenuには独自のルーティングモジュールがあるため、アプリのナビゲーションが非常に複雑になります。
アプリにサイドメニューはありますか?これは私もこの問題を抱えているときのようです。
インスペクタを見ると、window.history
の長さは1です。
一部のアプリでは表示されませんが、サイドメニューを設定したアプリはこのように動作します。ホームページを押すと、画面が白くなり、アプリがリロードされます。
私が言うように、インスペクターを見ると、ステップバックする履歴があり、それが行おうとしていることがわかります。そして、その履歴ステップが何であれ、それはホームページに押し戻されるだけでした。ナビゲーションシステムの独自のコントロールを設定するサイドメニュー。
言葉の表現が不適切な言葉を多分言ったかもしれませんが、私自身はこれを解決していないので、私が見つけたものをあなたに知らせたいと思っていました...
私のシナリオでは、バックコードで終了を実行することすらしていませんでした。押し続けると、アプリが「再起動」するように見えることに気づきました。