1. 程式人生 > >Andorid APP與JS互動

Andorid APP與JS互動

本文展示了Android APP與js互動的程式碼,大部分來源於網路。DEMO地址:https://download.csdn.net/download/a872822645/10892939

首先是js介面

<!DOCTYPE html>
<html lang="en">
<head>  
     <meta content="text/html" charset="UTF-8" http-equiv="content-type">
     <title>這裡是一個H5頁面</title>  
</head>  
  
<body>  
<p id="ptext" >點選按鍵0 執行android中的 public void click0(){} 方法</p>  
<Button id="buttonId0" class="buttonClass" onclick="showinfo()">按鍵0</Button>  
<p>點選按鍵1 執行android中的 public void click0(String data1,String data2){}方法</p>  
<Button id="buttonId1" class="buttonClass" onclick="javascript:android.click0('引數1','引數2')">按鍵1</Button>  
  
<script>
    function setRed(){
        //這個方法設定 id 為 ptext 的元素的背景色為紅色  
        var a = document.getElementById('ptext');
        a.style.backgroundColor="#F00";
    }
    function setColor(color,text){
        //這個方法設定 id 為 ptext 的元素的背景色為指定顏色  
        //設定 id 為 ptext 的元素的內容為text  
        var a = document.getElementById('ptext');
        a.style.backgroundColor=color;
        a.innerHTML = text;
    }
    function showinfo() {
        console.log("孫磊");
        android.click0();
    }
</script>  
</body>  
</html>

然後是:Andorid 介面

Activity:

package com.picc.greendao;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.Toast;
/**
 * <p>create by sunlei on 2019/1/3
 * <p>
[email protected]
* <p>Describe : */ public class HtmlDemoActivity extends Activity implements View.OnClickListener { private WebView webView; private Button redButton, colorButton; Handler myHandler; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_html); webView = (WebView) findViewById(R.id.webview); redButton = (Button) findViewById(R.id.red); myHandler=new Handler(); colorButton = (Button) findViewById(R.id.color); redButton.setOnClickListener(this); colorButton.setOnClickListener(this); initWebView(); webView.loadUrl("file:///android_asset/mutual.html");//載入assets檔案中的H5頁面   } @Override public void onClick(View v) { switch (v.getId()) { case R.id.red: webView.loadUrl("javascript:setRed()"); break; case R.id.color: webView.loadUrl("javascript:setColor('#00f','這是android 原生呼叫JS程式碼的觸發事件')"); break; } } private void initWebView() { WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true);//設定執行使用JS   ButtonClick click = new ButtonClick(); //這裡新增JS的互動事件,這樣H5就可以呼叫原生的程式碼   webView.addJavascriptInterface(click, "android"); } public class ButtonClick { @JavascriptInterface public void click0() { show("title", ""); } @JavascriptInterface public void click0(String data1, String data2) { show(data1, data2); } private void show(final String title, String data) { Toast.makeText(getApplication(),"測試",Toast.LENGTH_LONG).show(); Log.d("result","sunlei1"); myHandler.post(new Runnable() { @Override public void run() { redButton.setText(title); } }); Log.d("result","sunlei2"); } } }

xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">
      <WebView
    android:id="@+id/webview"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</WebView>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_alignParentBottom="true"
        >
        <Button
            android:id="@+id/red"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_weight="1"
            android:text="背景變成紅色"/>
        <Button
            android:id="@+id/color"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_weight="1"
            android:text="背景色可以自定義"/>
    </LinearLayout>
</RelativeLayout>

總結:本專案本人親測有效。如果您複製粘貼出現異常。請檢查程式碼格式問題。

     上面專案用Handler  是一個需要注意的地方。。如果不使用Handler是會報錯的。。注意。