繁体   English   中英

离子电容器硬件后退按钮自动关闭应用程序

[英]Ionic Capacitor hardware back button is automatically closing the app

我当前的设置是:

@capacitor/core: 3.0.0, @ionic-native/core: 5.0.7

我正在尝试将我的应用程序的行为更改为不关闭应用程序,而是将 go 返回到导航堆栈中。 据我所知,在我将 Capacitor 升级到 3.0.0 之前,Android 设备上的硬件后退按钮不会自动关闭应用程序

但是,让我感到困惑的是,我如何拥有绝对 0 代码来处理后退按钮功能,并且从我在网上搜索的所有内容来看,默认情况下后退按钮什么都不做,而不是默认自动关闭应用程序(就像我的一样)正在做)。 我搜索了所有项目文件,寻找与“平台”、“后退按钮”和“App.Exit”有关的任何内容,但找不到任何可能导致应用程序关闭的代码。

我尝试使用以下代码订阅后退按钮按下事件,但它从未运行过。 该应用程序关闭而不是显示警报对话框。 我已将优先级从 0、10 和 99 更改(所有优先级都列在 Ionic 文档中)

this.platform.backButton.subscribeWithPriority(10, () => {
  alert('Back button pressed!');
});

所以,意识到这一点后我觉得有点傻,但这是因为我必须运行以下命令,因为我在升级 Capacitor 时显然没有更新它们。 确保您的所有插件都已完全更新,您的可能与我的不同。

npm install @capacitor/app
npx cap sync
  1. 安装电容器应用程序。

    npm install @capacitor/app

  2. 导入它。

    import { App as CapacitorApp } from '@capacitor/app';

  3. 如果可以返回 go,则添加回侦听器,然后我们可以推回或退出应用程序。

     CapacitorApp.addListener('backButton', ({canGoBack}) => { if(.canGoBack){ CapacitorApp;exitApp(). } else { window.history;back(); } });

我遇到了同样的问题,我尝试安装这里所说的所有插件

npm install @capacitor/app @capacitor/haptics @capacitor/keyboard @capacitor/status-bar

安装完成后,我仍然收到错误消息。 我的 PushNotifications 插件也无法正常工作。

我的问题是我忘记从MainActivity.java中删除OnCreate方法。 因此,如果您在安装插件后仍有问题,请尝试删除OnCreate方法,使您的MainActivity.java看起来像这样:

 public class MainActivity extends BridgeActivity {}

在这里查看更多。

它还修复了我的 PushNotifications 插件。

如果我理解正确,如果您有任何未正确注册的插件,就会导致这种错误。 这个答案也帮助了我。

您需要使用以下代码来处理 Ionic 应用程序中的硬件后退按钮:

//back button handle
//Registration of push in Android and Windows Phone
let lastTimeBackPress: number = 0;
let timePeriodToExit: number = 2000;

platform.registerBackButtonAction(() => {

    //Double check to exit app
    if (new Date().getTime() - lastTimeBackPress < timePeriodToExit) {
        //this.platform.exitApp(); //Exit from app

        this.appMinimize.minimize().then(() => {
            console.log('minimized successfully');
        });
    } else {

        this.toastCtrl.create({
            message: this.translate.instant('EXIT_APP_MESSAGE'),
            duration: 3000,
            position: 'bottom'
        }).present();

        lastTimeBackPress = new Date().getTime();
    }
});

我有同样的问题,将@capacitor/app 添加到我的应用程序中用于调试目的。 问题是,当我构建发布应用程序时,它仍然会关闭应用程序。

- - 编辑 - -

我通过构建一个全新的 Ionic 应用程序(所有内容的最新版本)然后复制我的代码来解决这个问题。 我认为它确实与 Ionic 和 Capacitor 软件包的安装版本有关

https://stackoverflow.com/a/69084017/19086322

这篇文章对我来说真的很好!

在这篇文章之前我做了这些命令并且在它工作之后:

npm install @capacitor/app                                             
npx cap sync

对于 android:

import android.webkit.WebView;

import com.getcapacitor.BridgeActivity;

public class MainActivity extends BridgeActivity {
//in my case I call it the JS function when I press the back button
@Override
public void onBackPressed() {

    WebView webView = getBridge().getWebView();

    webView.loadUrl("javascript:pressBack()");

    // in Index.html create tag
    //     <script type="text/javascript">
    //function  pressBack(){
    //    alert('yes!!')
    //} </script>

    return;
}

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM