在 Android 应用开发中,Webview 组件上面加载了一个 HTML 页面。当HTML页面需要在 Android 应用程序中提供一个操作和返回值时,就可以使用 JavaScript 与 Android 应用程序进行通信,实现在 WebView 上面实现两端的数据互通。本文将会介绍如何在 HTML 页面中向 Android 应用程序传递参数。
一、通过JavascriptInterface接口实现数据交互
通过 JavascriptInterface 接口代表了一个用于在 WebView 上执行 JavaScript 代码的对象,可以在 Android 应用程序中使用它来对 WebView 上面的 HTML 页面进行一系列的操作。
在 Android 应用程序中通过向 WebView 加载一个 HTML 页面,例如 index.html 页面。可以通过 JavaScript 代码,获取应用程序中的信息,例如设备信息、网络状态等等。Android 应用程序也可以通过 JavaScript 代码向 WebView 页面中传递数据。
在 HTML 页面中定义 JavaScript 函数,用于调用 Android 应用程序提供的方法:
```javascript
function sendDataToAndroid(data){
window.MyAppInterface.sendDataToAndroid(data);
}
```
其中,sendDataToAndroid 函数用于向 Android 应用程序传递数据。
在 Android 应用程序中创建一个 JavaScriptInterface 接口:
```java
final class JavaScriptInterface {
private final WebView webView;
public JavaScriptInterface(WebView webView) {
this.webView = webView;
}
@JavascriptInterface
public void sendDataToAndroid(String data) {
Log.e("sendDataToAndroid", data);
}
}
```
其中,JavaScriptInterface 用于定义 Android 应用程序提供给 HTML 页面调用的方法,在该示例中,我们定义了一个 sendDataToAndroid 方法。
在 Activity 的 onCreate 方法中,注册 JavaScriptInterface:
```java
webView.addJavascriptInterface(new JavaScriptInterface(webView), "MyAppInterface");
```
其中,第一个参数是要注册的 JavaScriptInterface 对象, 第二个参数是 JavaScript 代码访问该 JavaScriptInterface 对象的名称
在 HTML 页面调用 Android 应用程序提供的方法:
```javascript
var data = "Hello, world!";
sendDataToAndroid(data);
```
通过该方式,HTML页面中的 JavaScript 代码可以通过 JavaScriptInterface 接口调用 Android 应用程序中的方法,实现了数据的相互传递。
二、通过UrlScheme实现数据交互
在 Android 应用程序中可以通过定义自己的 URL Scheme 来映射应用程序的数据到一个 URL,例如:
```xml
```
其中,scheme 属性用于定义链接的 URL Scheme,host 属性用于定义应用程序的包名,pathPrefix 属性用于定义应用程序的操 作名称。
在 HTML 页面中构造URL,启动 Android 应用程序:
```javascript
var data = 'Hello, world!';
window.location.href = 'example://com.example.android/test?data=' + encodeURIComponent(data);
```
在 Android 应用程序中调用指定的操作:
```java
Uri uri = getIntent().getData();
if(uri != null) {
String action = uri.getAction();
String host = uri.getHost();
String path = uri.getPath();
String data = uri.getQueryParameter("data");
Log.e(TAG, "action:" + action);
Log.e(TAG, "host:" + host);
Log.e(TAG, "path:" + path);
Log.e(TAG, "data:" + data);
}
```
通过该方式,HTML页面中的 JavaScript 代码可以通过 URL Scheme 启动 Android 应用程序中的指定操作,实现了数据的传递。