天天看點

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間資料傳遞。