@javascriptinterface
时间: 2023-05-02 09:00:58 浏览: 176
@javascriptinterface是一个Android中的注解,用于标注Java方法,使其可以被JavaScript调用。这个注解在Android 4.2版本后推出,主要用于实现JavaScript和Android的交互。
相关问题
@JavascriptInterface
`@JavascriptInterface` 是Android JavaScript Interface库(如DroidGap/Cordova)提供的一种注解,它允许Java开发者创建JavaScript可以访问的接口。当一个Java方法被这个注解修饰后,JavaScript可以在运行时通过WebView调用该方法,实现Java与JavaScript之间的交互。这种方式常用于构建混合应用(Hybrid App),即结合了原生组件和Web内容的应用。
例如,在Android端,你可以有一个Java类:
```java
@JavascriptInterface
public class MyJavaScriptBridge {
public void doSomething(String message) {
// 这里是你的Java处理逻辑
Log.d("Bridge", "Received message: " + message);
}
}
```
然后在JavaScript中,就可以像这样调用它:
```javascript
document.getElementById('myButton').addEventListener('click', function() {
myBridge.doSomething('Hello from JS!');
});
```
使用@JavascriptInterface,举例说明,点击html中的button,跳转到zxing二维码扫描页面
使用 `@JavascriptInterface` 注解可以实现 JavaScript 与 Android 之间的交互,包括在 HTML 中的按钮点击事件中触发 Android 功能。下面是一个示例,展示如何点击 HTML 中的按钮,并通过调用 ZXing 库来跳转到二维码扫描页面:
1. 首先,在你的 Android 项目中添加 ZXing 库的依赖。可以在 build.gradle 文件中添加以下代码:
```groovy
implementation 'com.google.zxing:core:3.4.1'
implementation 'com.journeyapps:zxing-android-embedded:3.4.0'
```
2. 在你的 HTML 页面中,添加一个按钮,并定义一个 JavaScript 函数来触发该按钮的点击事件:
```html
<!DOCTYPE html>
<html>
<head>
<title>HTML Button Example</title>
<script type="text/javascript">
function scanQRCode() {
AndroidInterface.scanQRCode();
}
</script>
</head>
<body>
<button onclick="scanQRCode()">Scan QR Code</button>
</body>
</html>
```
3. 在 Android 项目中创建一个 WebView,并使用 `@JavascriptInterface` 注解创建一个 Java 接口,用于在 JavaScript 中调用 Android 功能:
```java
import android.content.Intent;
import android.net.Uri;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
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.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new WebAppInterface(), "AndroidInterface");
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("file:///android_asset/sample.html");
}
public class WebAppInterface {
@JavascriptInterface
public void scanQRCode() {
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
startActivityForResult(intent, 0);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0 && resultCode == RESULT_OK) {
String contents = data.getStringExtra("SCAN_RESULT");
// 处理扫描结果
}
}
}
```
在上述代码中,`WebAppInterface` 是一个 Java 接口,使用 `@JavascriptInterface` 注解修饰了 `scanQRCode()` 方法。该方法会在 JavaScript 中被调用,触发跳转到 ZXing 的二维码扫描页面。
通过以上步骤,当 HTML 页面中的按钮被点击时,会触发 `scanQRCode()` 方法,跳转到 ZXing 的二维码扫描页面。扫描结果会通过 `onActivityResult()` 方法返回,并可以在其中进行处理。
阅读全文