Android 與 Html5 、JS交互

Android與Html5、JS做交互分爲兩種情況。

1. Html5調用Android的方法

    在Android上展示Html5的頁面是通過控件WebView實現的,這我們都知道。而Html端若想調用Android的東西,只能通過Android端在load這個界面之前,給WebVeiw添加一個對象,然後Html端去獲取這個對象。

    通過這個對象我們可以做很多東西,因爲Html端獲得這個對象後就可以調取這個對象內的任意方法。例如:傳值、跳轉等。

    首先來看Android端需要做的:

         1. 創建一個對象;
         2. 在onCreate()中講這個對象傳遞過去;
         3. load這個頁面;

    代碼如下:
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        wv_main_body = (WebView) findViewById(R.id.wv_main_body);

        // 把本類的一個實例添加到js的全局對象window中,
        wv_main_body.addJavascriptInterface(new InJavaScript(this), "android_lvstudio");
        wv_main_body.loadUrl("file:///android_asset/webpage.html");

    }
`/**
 * 需要傳遞給Html端的對象類
 * @author LvStudio
 *
 */
final class InJavaScript {
    private Context context;

    public InJavaScript() {

    }

    /**
     * 由於涉及到了跳轉,上下文對象Context需要通過構造傳過來。當然也可以傳其他東西。
     * 
     * @param context
     */
    public InJavaScript(Context context) {
        this.context = context;
    }

    /**
     * 簡單的點擊跳轉,不涉及參數及返回值。
     */
    @JavascriptInterface
    public void goNext() {
        Intent it = new Intent(context, OtherActivity.class);
        context.startActivity(it);
    }

    /**
     * 通過獲取Html端的參數,進行操作後,將結果返回給Html端。
     * 
     * 此處可進行本地數據庫操作,網絡請求等,適需求而定。
     * 
     * @param num1
     * @param num2
     * @return
     */
    @JavascriptInterface
    public int queryData(int num1, int num2) {
        int sum = 0;
        sum = num1 + num2;
        return sum;
    }
}`

    **然後是Html端需要做的就是通過這個對象調用相應的方法。**
    代碼如下:
window.android_lvstudio.goNext();// 跳轉
var sum = window.android_lvstudio.queryData(1,1); // 傳值比獲取返回值

2. Android調用Html5的方法

這塊的操作就比較簡單了,直接通過loadUrl()就可以了。

簡單的傳字符串過去,代碼如下:
wv_main_body.loadUrl("javascript:writeInAndroid("+"這是傳給Html端的參數"+")");// 向Html頁面傳值

加班中倉促~~~,注意事項稍後補充。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章