1黑马币
学生:老师我工作中遇到了一个这样的问题(很多出去面试的同学也遇到这个问题),假设我webview加载了一个html5网页,这时候网页上面有一个button,我点击button后让他进入一个银联支付的界面。怎么搞。
回答:怎么搞。首先我们分析这个问题,这个问题的核心是webview加载的网页里面如何访问android代码。其他的html5,都是用来唬人的,至于银联的界面,那个是陪衬,不是问题所在
那么如何访问呢:首先我们应该给部门的人沟通,让网页前端的人写一个java方法的回调。具体这个回调怎么写,非常简单,因为不涉及android技术,不在这里详解,你告诉网页前端后,网页知道怎么写。
然后你在自己的webview里面写如下代码:
- package com.testwebview;
- import android.annotation.SuppressLint;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.View;
- import android.webkit.WebSettings;
- import android.webkit.WebView;
- import android.widget.Button;
- import android.widget.Toast;
- public class MainActivity extends Activity {
- private WebView mWebView;
- private Button androidCallJSBtn;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- initView();
- }
- @SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled" })
- private void initView() {
-
- mWebView = (WebView) findViewById(R.id.webview);
- WebSettings mWebSettings = mWebView.getSettings();
-
- mWebSettings.setJavaScriptEnabled(true); //加上这句话才能使用javascript方法
- mWebView.addJavascriptInterface(new Object() {//增加接口方法,让html页面调用
- public void callJavaMethod() {
- Toast.makeText(getApplicationContext(), "JS调用Android成功", Toast.LENGTH_LONG).show();
- }
-
- }, "demo");
- mWebView.loadUrl("file:///android_asset/demo.html"); //加载页面
-
- androidCallJSBtn = (Button) findViewById(R.id.androidCallJSBtn);
- androidCallJSBtn.setOnClickListener(new Button.OnClickListener() { //给button添加事件响应,执行JavaScript的fillContent()方法
- public void onClick(View v) {
- mWebView.loadUrl("javascript:callJavaScriptMethod()");
- }
- });
- }
- }
复制代码
具体代码看我的附件,运行在手机上面即可
|
|