我使用的是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,以确保客户端上的事件处理程序已经被添加。
救命啊!
2条答案
按热度按时间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中接收它。
ygya80vv2#
根据文件:数据必须是序列化的JSON字符串值。下面的代码对我很有效。