I don’t think this is the best solution to get the javascript to execute java code. See here:
If you want to expose native code to the HTML to be callable via javascript, do the following around your web view declaration:
JavaScriptInterface jsInterface = new JavaScriptInterface(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(jsInterface, "JSInterface");
Declare the class JavaScriptInterface
:
public class JavaScriptInterface {
private Activity activity;
public JavaScriptInterface(Activity activity) {
this.activity = activity;
}
@JavascriptInterface
public void startVideo(String videoAddress){
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(videoAddress), "video/3gpp");
activity.startActivity(intent);
}
}
I am declaring a single function for playing a video, but you can do whatever you want.
Finally you call this in the WebView
contents via simple javascript call:
<video width="320" height="240" controls="controls" poster="poster.gif"
onclick="window.JSInterface.startVideo('file:///sdcard/test.3gp');" >
Your browser does not support the video tag.
</video>
The example is taken from another answer of mine, about playing videos, but should be explaining enough.
EDIT As per @CedricSoubrie’s comment: if the target version of the application is set to 17 or higher you need to add annotation @JavascriptInterface
above each method you want to export to the web view.