【问题标题】:How to change android activity by clicking a button in (ionic) webview?如何通过单击(离子)webview中的按钮来更改android活动?
【发布时间】:2023-05-21 01:52:01
【问题描述】:

我正在使用 Ionic 4 开发一个混合应用程序。Ionic 就像其他基于 html5 的应用程序一样在 MainActivity 中以 webview 运行。使用电容器我已将我的应用程序导入到 android studio 并创建了一个SecondActivity。如何通过单击第一个活动(MainActivity)(这是一个 Ioninc 页面,并且肯定是一个 html 网页视图)中的一个按钮来转到 SecondActivity

到目前为止,我已经尝试了不同的方法来实现这一点,但没有运气。 我按照本教程创建了一个cordova插件: Start android activity from cordova plugin 它在cordova应用程序中运行良好,但我没有成功将它导入Ionic。 我也尝试过电容器,显然使用电容器访问本机代码应该很容易,但不幸的是,到目前为止我还没有运气。 https://capacitor.ionicframework.com/docs/plugins/android

【问题讨论】:

    标签: android ionic-framework android-intent android-activity capacitor


    【解决方案1】:

    经过很多努力!这是答案: 我提到的插件实际上在cordova中很酷并将它带到ionic4(因为插件的clobbers是“PluginName”,你必须在你的打字稿中声明和使用它)我的代码如下(home.page.ts) :

    import { Component } from '@angular/core';
    declare var PluginName: any;
    @Component({
    selector: 'app-home',
    templateUrl: 'home.page.html',
    styleUrls: ['home.page.scss'],
    })
    export class HomePage {
    goToCustomActivity(){
    PluginName.new_activity();
    }
    }
    

    在你的 home.page.html 中:

    <ion-content>
    <ion-button (click)="goToCustomActivity()">go to custom activity</ion- 
    button>
    </ion-content>
    

    我希望这对某人有所帮助。 特别感谢插件“Ijas Ahamed N”的原始编码器 您可以在此处找到编写插件的说明: https://www.ijasnahamed.in/2016/11/start-android-activity-from-cordova.html 这是*(注意!在*中省略了创建package.json的步骤!) Start android activity from cordova plugin

    【讨论】:

      【解决方案2】:

      您可以通过使用WebView.addJavaInterface 来做到这一点。只需用 Java 编写一个 Android 类(以启动您想要的 Activity),然后通过调用 WebView.addJavaInterface() 将对象注入 WebView 上下文。当点击 HTML 按钮时,调用注入的 JS 方法来启动 Activity。

      活动启动器:

      class MyJsInterface {
          @JavascriptInterface
          public String launchActivity() {
              // ...;
          }
       }
      

      注入它:

      webview.getSettings().setJavaScriptEnabled(true);
      webView.addJavascriptInterface(new MyJsInterface(), "AndroidInterface");
      webView.loadUrl(...);
      

      在您的网页中:

      <button onclick="AndroidInterface.launchActivity()">Launche Activity</button>
      

      【讨论】:

      • 感谢您的回复。这种方法应该有效。但我没有成功在 Ionic 和 typescript 中使用它!你能分享在 Ionic 中使用它的说明吗?
      最近更新 更多