Ionic 离子电容器处理Android Java代码中的事件

rlcwz9us  于 2022-12-08  发布在  Ionic
关注(0)|答案(2)|浏览(195)

我使用的是ionic-react和capacitor。我需要从Android原生代码触发一个事件,并通过JavaScript处理它。下面是我的测试代码:
在MainActivity.java:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Initializes the Bridge
    this.init(savedInstanceState, new ArrayList<Class<? extends Plugin>>() {{
      // Additional plugins you've installed go here
      // Ex: add(TotallyAwesomePlugin.class);
    }});
    new Handler().postDelayed(new Runnable() {
      @Override
      public void run() {
        bridge.triggerWindowJSEvent("MyPushEvent", "test");
      }
    }, 25000);
  }

在应用程序tsx中

window.addEventListener("MyPushEvent", function (msg) {
    console.log("Push Event: " + msg);
    alert("Window Push Event: " + msg);
  });

基本上,在长时间延迟之后,我在onCreate中调用bridge.triggerWindowJSEvent,以确保客户端上的事件处理程序已经被添加。
救命啊!

emeijp43

emeijp431#

我认为这不会以这种方式完成,因为在离子应用程序中的要点是首先启动主活动,这是主活动,并在主活动午餐后,它开始启动方法来启动index.html,这样所有的应用程序页面将在主活动中启动。我以前做过的实现它的是使2个句柄,第一个是延迟1500ms的POST,在其内部将是索引的启动。html,另一个处理程序使用方法post而不是postdelayed,因为post将被添加到处理程序的queque,因此将被添加到第一个post delayed处理程序,因此在应用程序启动2500 ms后然后将启动app.tsx或cordova中的app.ts,并因此准备好接收事件,因此在这2500 ms之后,我们添加一个handler.post(..runnable ...),并在其中启动您的事件并在app.tsx中接收它。

ygya80vv

ygya80vv2#

根据文件:数据必须是序列化的JSON字符串值。下面的代码对我很有效。

public void onResume(){
    super.onResume();

    new Handler().postDelayed(new Runnable() {
      @Override
      public void run() {
        bridge.triggerWindowJSEvent("MyPushEvent", "{\"test1\":\"test2\"}");
      }
    }, 5000);
  }

window.addEventListener('MyPushEvent', function (msg: any) {
    alert('Window Push Event: ' + msg.test1);
  });

相关问题