Android H5调用原生
在移动应用开发中,有时候我们需要在H5页面中调用原生的功能,比如调用相机、获取位置信息等。在Android平台上,我们可以通过WebView来实现H5调用原生的功能。下面将介绍如何在Android应用中实现H5调用原生功能,并提供代码示例。
1. 在Android项目中添加WebView
首先,在Android项目中添加一个WebView,用来加载H5页面。在布局文件中添加WebView:
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
然后在Activity中找到WebView,并加载H5页面:
WebView webView = findViewById(R.id.webView);
webView.loadUrl("file:///android_asset/index.html");
2. 在H5页面中调用原生功能
在H5页面中,我们可以通过JavaScript与原生进行交互。在H5页面中添加一个按钮,点击按钮时调用原生的方法:
<button onclick="callNative()">调用原生</button>
<script>
function callNative() {
// 调用原生方法
window.androidInterface.showToast("Hello from H5!");
}
</script>
3. 在Android中实现原生方法
在Android中实现一个类,用来接收H5页面传递过来的方法调用。该类需要继承自WebView的WebChromeClient类,并实现onJsPrompt方法:
public class MyWebChromeClient extends WebChromeClient {
@Override
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
if (message.startsWith("jsbridge:")) {
// 处理H5调用原生的方法
String data = message.substring("jsbridge:".length());
// 这里可以根据不同的方法,做出不同的响应
if ("showToast".equals(data)) {
Toast.makeText(MainActivity.this, defaultValue, Toast.LENGTH_SHORT).show();
}
result.confirm();
return true;
}
return super.onJsPrompt(view, url, message, defaultValue, result);
}
}
4. 注入JavaScript接口
在Activity中为WebView添加一个JavaScript接口,用于H5页面调用原生方法:
webView.addJavascriptInterface(new AndroidInterface(), "androidInterface");
定义AndroidInterface类,用来实现H5页面调用的方法:
public class AndroidInterface {
@JavascriptInterface
public void showToast(String message) {
Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
}
}
5. 完整代码示例
下面是一个完整的示例代码:
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.loadUrl("file:///android_asset/index.html");
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.setWebChromeClient(new MyWebChromeClient());
webView.addJavascriptInterface(new AndroidInterface(), "androidInterface");
}
public class MyWebChromeClient extends WebChromeClient {
@Override
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
if (message.startsWith("jsbridge:")) {
String data = message.substring("jsbridge:".length());
if ("showToast".equals(data)) {
Toast.makeText(MainActivity.this, defaultValue, Toast.LENGTH_SHORT).show();
}
result.confirm();
return true;
}
return super.onJsPrompt(view, url, message, defaultValue, result);
}
}
public class AndroidInterface {
@JavascriptInterface
public void showToast(String message) {
Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
}
}
}
6. 总结
通过上面的步骤,我们可以在Android应用中实现H5调用原生的功能。在实际开发中,可以根据具体需求来扩展原生方法,实现更多的功能。希望本文对你有所帮助,祝你开发顺利!