js调用android :主要调用
mWebView.addJavascriptInterface
// 第一个参数创建一个对象,第二个参数是js中调用该对象的名称 mWebView.addJavascriptInterface(new JavaScriptObject(this), "androidObj");//第一个参数创建一个对象,第二个参数是js中调用该对象的名称
****************android 调用js***********************
mWebView.loadUrl("javascript:onJsAndroid()");
下面贴上代码实现:
package czg.AddFriend.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.webkit.JavascriptInterface; import android.webkit.JsPromptResult; import android.webkit.JsResult; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import czg.AddFriend.R; /** * write by czg20161227 */ public class MyWebActivity extends AppCompatActivity { private static final String LOG_TAG = "MyWebActivity"; private WebView mWebView; private EditText mReusultText ; private Handler mHandler = new Handler(); Button btn_callJs; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_web); init_view(); } private void init_view() { //获得浏览器组件 //WebView就是一个简单的浏览器 //android浏览器源码存在于LINUX\android\package\apps\Browser中 //里面的所有操作都是围绕WebView来展开的 mWebView = (WebView) findViewById(R.id.webView); mReusultText = (EditText) findViewById(R.id.et_resultText); btn_callJs = (Button) findViewById(R.id.btn_callJs); btn_callJs.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //在js中需要定义function_in_js_demo方法 mWebView.loadUrl("javascript:function_in_js_demo("+"'这是anroid传递给js的参数')"); } }); //WebSettings 几乎浏览器的所有设置都在该类中进行 WebSettings webSettings = mWebView.getSettings(); webSettings.setDefaultTextEncodingName("utf-8"); webSettings.setSaveFormData(false); webSettings.setJavaScriptEnabled(true); webSettings.setSupportZoom(false); mWebView.setWebChromeClient(new MyWebChromeClient()); /* * JavaScriptObject类为js调用android服务器端提供接口 * android 作为JavaScriptObject类的客户端接口被js调用 * 调用的具体方法在JavaScriptObject中定义: * 例如该实例中的clickOnAndroid */ // 第一个参数创建一个对象,第二个参数是js中调用该对象的名称 mWebView.addJavascriptInterface(new JavaScriptObject(this), "androidObj");//第一个参数创建一个对象,第二个参数是js中调用该对象的名称 mWebView.loadUrl("file:///android_asset/www/map.html"); } /* * DemoJavaScriptInterface类为js调用android服务器端提供接口 * android 作为DemoJavaScriptInterface类的客户端接口被js调用 * 调用的具体方法在DemoJavaScriptInterface中定义: * 例如该实例中的clickOnAndroid */ final class DemoJavaScriptInterface { DemoJavaScriptInterface() {} /** * 该方法被浏览器端调用 */ public void clickOnAndroid() { mHandler.post(new Runnable() { public void run() { //调用js中的onJsAndroid方法 mWebView.loadUrl("javascript:onJsAndroid()"); } }); } } public class JavaScriptObject { Context mContxt; public JavaScriptObject(Context mContxt) { this.mContxt = mContxt; } @JavascriptInterface //sdk17版本以上加上注解 public void fun1FromAndroid(String name) { Toast.makeText(mContxt, name, Toast.LENGTH_LONG).show(); Log.i(LOG_TAG,"fun1FromAndroid"+name); } @JavascriptInterface //sdk17版本以上加上注解 public void fun2(String name) { Toast.makeText(mContxt, "调用fun2:" + name, Toast.LENGTH_SHORT).show(); Log.i(LOG_TAG,"fun2"+name); } } /** * 继承WebChromeClient类 * 对js弹出框时间进行处理 * */ final class MyWebChromeClient extends WebChromeClient { /** * 处理alert弹出框 */ @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { //return super.onJsAlert(view, url, message, result); Log.d(LOG_TAG,"onJsAlert消息:"+message); mReusultText.setText("Alert:"+message); //对alert的简单封装 new AlertDialog.Builder(MyWebActivity.this). setTitle("Alert").setMessage(message).setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { //TODO } }).create().show(); result.confirm(); return true; } /** * 处理confirm弹出框 */ @Override public boolean onJsConfirm(WebView view, String url, String message, JsResult result) { //return super.onJsConfirm(view, url, message, result); Log.d(LOG_TAG, "onJsConfirm消息:"+message); mReusultText.setText("Confirm:"+message); result.confirm(); return super.onJsConfirm(view, url, message, result); } /** * 处理prompt弹出框 */ @Override public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) { // return super.onJsPrompt(view, url, message, defaultValue, result); Log.d(LOG_TAG,"onJsPrompt消息:"+message); mReusultText.setText("Prompt input is :"+message); result.confirm(); return super.onJsPrompt(view, url, message, message, result); } } }
***************js文件代码部分**************************************************
function_in_js_demo = function(xx) { console.log('android插入的参数:'+xx); alert('ok'+xx); }
window.androidObj.fun1FromAndroid('123132对方付费 ');