返回
Android和H5交互之模板代码分享
Android
2023-09-15 15:22:05
Android和H5交互:优化开发体验的实用模板
构建交互对象
交互对象是Android和H5交互的核心,它监听并处理来自H5端的请求。继承自WebViewClient并覆写shouldOverrideUrlLoading方法来拦截请求。
public class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
// 根据uri处理请求,如打开外部浏览器或执行Native功能
return true;
}
}
WebView配置交互对象
将交互对象设置到WebView,使其能处理H5请求。
WebView webView = findViewById(R.id.webView);
webView.setWebViewClient(new MyWebViewClient());
响应H5请求
在shouldOverrideUrlLoading方法中,根据uri做出不同处理,如打开外部浏览器:
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
或执行Native功能:
// 执行Native功能代码
实现H5调用Native
使用JavaScriptInterface将Native方法暴露给H5,允许H5调用Native方法。
public class MyJavaScriptInterface {
@JavascriptInterface
public void callNativeMethod() {
// 执行Native方法代码
}
}
将JavaScriptInterface添加到WebView:
webView.addJavascriptInterface(new MyJavaScriptInterface(), "NativeInterface");
完整示例
public class MainActivity extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = findViewById(R.id.webView);
webView.setWebViewClient(new MyWebViewClient());
webView.addJavascriptInterface(new MyJavaScriptInterface(), "NativeInterface");
}
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
Uri uri = request.getUrl();
if (uri.toString().startsWith("http://") || uri.toString().startsWith("https://")) {
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
return true;
}
return false;
}
}
private class MyJavaScriptInterface {
@JavascriptInterface
public void callNativeMethod() {
// 执行Native方法代码
}
}
}
拓展
此模板可根据需求拓展,如处理H5参数、Native和H5数据交互以及安全机制。
常见问题解答
- H5端如何调用Native方法? 使用JavaScriptInterface将Native方法暴露给H5。
- Native端如何接收H5数据? 使用WebViewClient或JavaScriptInterface监听H5事件,接收数据。
- H5端如何执行Native功能? 通过调用JavaScriptInterface中暴露的Native方法。
- 如何确保交互安全? 采用安全机制,如CSP和验证请求。
- 如何优化交互性能? 避免频繁WebView与H5之间的通信,使用缓存和优化数据传输。