如何在应用程序恢复时在Android WebView中触发javascript事件

如何在应用程序恢复时在Android WebView中触发javascript事件,javascript,android,events,android-webview,onresume,Javascript,Android,Events,Android Webview,Onresume,我的Android应用程序中有一个WebView,我需要随时运行JavaScript函数 应用程序/网络视图切换到(例如,使用应用程序切换器或从主屏幕点击图标) 设备从睡眠中醒来(当设备进入睡眠状态时,应用程序仍在屏幕上) 在我的网页javascript中使用事件侦听器仅适用于案例1 理想情况下,我希望使用AndroidonResume()java函数触发某种javascript事件,但是如何触发呢?您可以使用WebView方法来实现这一点 首先,您需要在网页javascript中创建一个事件,

我的Android应用程序中有一个WebView,我需要随时运行JavaScript函数

  • 应用程序/网络视图切换到(例如,使用应用程序切换器或从主屏幕点击图标)
  • 设备从睡眠中醒来(当设备进入睡眠状态时,应用程序仍在屏幕上)
  • 在我的网页javascript中使用事件侦听器仅适用于案例1


    理想情况下,我希望使用Android
    onResume()
    java函数触发某种javascript事件,但是如何触发呢?

    您可以使用WebView方法来实现这一点

    首先,您需要在网页javascript中创建一个事件,并添加事件处理程序:

    window.appresumevent=新事件(“appresume”);
    addEventListener('appresume',yourFunction,false);
    函数yourFunction(){…}
    
    在全局范围内设置创建应用程序恢复事件非常重要(可以通过将其设置为
    窗口的属性来实现)

    现在,在Android的
    onResume()
    方法中,运行
    evaluateJavascript()
    方法:

    @覆盖
    受保护的void onResume(){
    super.onResume();
    mainWebView.evaluateJavascript((函数(){window.dispatchEvent(appResumeEvent);})(;”,新值回调(){
    @凌驾
    公共无效onReceiveValue(字符串值){
    }
    });
    }
    
    注意,javascript必须包装在一个立即调用的函数表达式中。另请注意
    dispatchEvent()
    将事件变量作为参数,而不是事件名称字符串

    更多信息:(MDN)

    对于我的完整
    MainActivity.java
    ,请单击“显示代码段”:

    导入android.webkit.WebSettings;
    导入android.webkit.WebView;
    导入android.webkit.WebViewClient;
    公共类MainActivity扩展了AppCompatActivity{
    私有网络视图主网络视图;
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mainWebView=findViewById(R.id.activity\u main\u webview);
    setWebViewClient(新的WebViewClient());
    WebSettings WebSettings=mainWebView.getSettings();
    setJavaScriptEnabled(true);
    mainWebView.loadUrl(“file:///android_asset/www/index.html");
    }
    @凌驾
    受保护的void onResume(){
    super.onResume();
    mainWebView.evaluateJavascript((函数(){window.dispatchEvent(appResumeEvent);})(;”,新值回调(){
    @凌驾
    公共无效onReceiveValue(字符串值){
    }
    });
    }
    }