android 调用js 和js中调用android的实现

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对方付费 ');


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牵手生活

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值