天天看点

Android当中跟js进行交互,实现方法的互调

今天在浏览的时候看到android跟js的交互,就想的学习一下,上网搜了很多资料,感觉还不是太难,就自己动手试了下,结果出了很多问题

说起交互其实很简单,只是可能sdk的版本或是别的一些小问题会困扰很长时间:

这是代码:

package wst.webview;

import android.annotation.suppresslint;

import android.app.activity;

import android.os.bundle;

import android.view.view;

import android.view.view.onclicklistener;

import android.webkit.javascriptinterface;

import android.webkit.webview;

import android.widget.button;

import android.widget.textview;

import android.widget.toast;

public class mainactivity extends activity {

    private webview contentwebview = null;

    private textview msgview = null;

    @suppresslint("setjavascriptenabled")

    @override

    public void oncreate(bundle savedinstancestate) {

        super.oncreate(savedinstancestate);

        setcontentview(r.layout.main);

        contentwebview = (webview) findviewbyid(r.id.webview);

        msgview = (textview) findviewbyid(r.id.msg);

        // 启用javascript

        contentwebview.getsettings().setjavascriptenabled(true);

        // 从assets目录下面的加载html

        contentwebview.loadurl("file:///android_asset/wst.html");

        button button = (button) findviewbyid(r.id.button);

        button.setonclicklistener(btnclicklistener);

        contentwebview.addjavascriptinterface(this, "android");

    }

    onclicklistener btnclicklistener = new button.onclicklistener() {

        public void onclick(view v) {

            // 无参数调用

            contentwebview.loadurl("javascript:javacalljs()");

            // 传递参数调用

            contentwebview.loadurl("javascript:javacalljswithargs(" + "'nimabi'" + ")");

        }

    };

    public void startfunction() {

        toast.maketext(this, "js调用了java函数", toast.length_short).show();

        runonuithread(new runnable() {

            @override

            public void run() {

                msgview.settext(msgview.gettext() + "\njs调用了java函数");

            }

        });

    public void startfunction(final string str) {

        toast.maketext(this, str, toast.length_short).show();

                msgview.settext(msgview.gettext() + "\njs调用了java函数传递参数:" + str);

}

还有html的代码:这是在assets文件夹下

<html>

<head>

<meta http-equiv="content-type"    content="text/html;charset=gb2312">

<script type="text/javascript">

function javacalljs(){

     document.getelementbyid("content").innerhtml +=   

         "<br\>java调用了js函数";

function javacalljswithargs(arg){

         ("<br\>"+arg);

function showandroidtoast(toast) {

        wst.showtoast(toast);

</script>

</head>

<body>

this is my html <br/>

<a onclick="window.android.startfunction()">点击调用java代码</a><br/>

<a onclick="window.android.startfunction('helloworld')" >点击调用java代码并传递参数</a>

<br/>

<div id="content">内容显示</div>

</body>

</html>

我今天主要遇到的问题是java调用js可以实现,但是js调用java代码没有反应,在网上查到说是注入的问题,但是注入了也不能用,想的既然版本限制的问题,然后我删掉清单文件中的

  <uses-sdk

        android:minsdkversion="7"

        android:targetsdkversion="16" />

程序就ok了,搞通这个以后就可以实现android跟js间数据传递。