1. 程式人生 > >Android 與 H5 之間的互調

Android 與 H5 之間的互調

目錄

1. 前言
2. 簡介
3. 效果
4. 程式碼
5. 總結

1.前言

在APP的開發中嵌入了H5頁面,這樣就可以在Android和iOS系統上跑,大大節約了成本。因此作為移動端開發者,一定要學會使用手機系統與H5頁面的互調,下面介紹一下Android與H5的互調,關於其具體使用會在程式碼中說明。

2.簡介

安卓與H5的互調是在 WebView 上實現的,首先簡單介紹一下WebView,它是一個基於webkit引擎,用於載入web頁面的控制元件,在4.4後被替換成基於Chromium實現。有以下特點:
1. 能夠載入網路頁面和本地頁面
2. 可以使 JAVA 和 JavaScript 相互操作
3. 可以自定義該控制元件

3.效果

  1. 輸入賬號密碼,將使用者名稱作為引數傳遞到網頁中(java調js)
  2. 點選網頁中的按鈕,彈出提示(js調java)

這裡寫圖片描述

4.程式碼

//H5程式碼如下
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <script type="text/javascript">

    function javaCallJs(arg){
         document.getElementById("content"
).innerHTML = ("username:"+arg ); }
</script> </head> <body> <p align="center">這是一個網頁</p> <div id="content">content</div><br/> <img width="200" height="100" align="center" src="http://img4.imgtn.bdimg.com/it/u=2557743232,2622704824&fm=27&gp=0.jpg"
>
<br/><br/> <input type="button" value="按鈕" onclick="window.Android.showToast()"/> </body> </html>

Java調Js

// 登陸介面的java程式碼如下
public class LoginActivity extends AppCompatActivity implements OnClickListener {

    private AutoCompleteTextView etusername;   //賬號編輯框
    private EditText etpassword;               //密碼編輯框
    private Button btnLogin;                   //按鈕
    private WebView webView;                   //Web檢視

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        findViews();            //初始化控制元件
        initWebView();          //初始化webView
    }

    /**
     * 初始化控制元件
     */
    private void findViews() {
        etusername = (AutoCompleteTextView) findViewById(R.id.email);
        etpassword = (EditText) findViewById(R.id.password);
        btnLogin = (Button) findViewById(R.id.email_sign_in_button);
        btnLogin.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        if (v == btnLogin) {
            checkAccount();   //判斷使用者
        }
    }

    /**
     * 判斷使用者
     */
    private void checkAccount() {
        String username = etusername.getText().toString().trim();
        String psw = etpassword.getText().toString().trim();
        //判斷非空
        if (TextUtils.isEmpty(username) || TextUtils.isEmpty(psw)) {
            Toast.makeText(this, "賬號密碼不能為空", Toast.LENGTH_SHORT).show();
        } else {
            login(username);  // 登陸,傳入使用者名稱
        }
    }

    /**
     * 登陸
     *
     * @param username
     */
    private void login(String username) {
        //將引數傳到H5頁面,注意括號中的書寫格式
        webView.loadUrl("javascript:javaCallJs(" + "'" + username + "'" + ")");
        setContentView(webView);  //使webView顯示頁面
    }

    /**
     * 初始化WebView
     */
    public void initWebView() {
        webView = new WebView(this);

        WebSettings webSettings = webView.getSettings();

        //設定支援javaScript
        webSettings.setJavaScriptEnabled(true);

        //設定不呼叫系統自帶的瀏覽器
        webView.setWebViewClient(new WebViewClient());

        //載入網路頁面或者本地頁面
        //webView.loadUrl("http://www.baidu.com");

        //載入本地圖片,在專案的路徑app/main中建立資料夾 assets
        //注意!!這裡的 android-asset 中, asset 不能寫成 assets ;
        webView.loadUrl("file:///android_asset/JavaAndJavaScript.html");
    }
}

Js調Java

  • 步驟
    1. 配置JavaScript介面
    2. 實現javaScript介面

注意:當出現如下圖問題的時候,有兩種解決addJavascriptInterface無效的辦法:

這裡寫圖片描述

因為在API17的時候WebView進行了改版,因此知支援17以下的版本(不包括17)

//在build.gradle(APP)中,將targetSdkVersion改成16,如下:
   defaultConfig {
        applicationId "com.jwllls.androidh5demo"
        minSdkVersion 19
        targetSdkVersion 16
        versionCode 1
        versionName "1.0"
    }

在介面方法中添加註解,如下:

   // 該類的方法提供給JS呼叫
    class JsCallJavaInterface {
        @JavascriptInterface                         //添加註解
        public void showToast(Context context) {
            Toast.makeText(context, "js調Java", Toast.LENGTH_SHORT).show();
        }
    }
  • 程式碼
//設定支援js呼叫java,js能夠通過Android欄位來呼叫AndroidAndJSInterface中的方法
webView.addJavascriptInterface(new AndroidAndJSInterface(),"Android");

// h5程式碼
<input type="button" value="按鈕" onclick="window.Android.showToast()" />

5.總結

完成以上步驟就實現了 Android 與 H5 的基本互調,
要注意的是:

  • 將引數傳到H5頁面,注意括號中的書寫格式 ,如下:
 webView.loadUrl("javascript:javaCallJs(" + "'" + username + "'" + ")");
  • 建立資料夾的時候要命名為 ==assets==, 而在程式碼中要寫成 ==asset==

  • addJavascriptInterface 方法裡面的欄位 Android 一定要與 window.Android.showToast 中的 Android 一致。

相關推薦

androidh5之間調

android與h5之間的互調 最近android專案中用到了與html之間的互動,總結了一下,還是比較全的,主要有 java呼叫js函式,js呼叫java函式,瀏覽器中通過連結開啟app - Android和H5互調-java呼叫js private void initW

Android H5 之間調

目錄 1. 前言 2. 簡介 3. 效果 4. 程式碼 5. 總結 1.前言 在APP的開發中嵌入了H5頁面,這樣就可以在Android和iOS系統上跑,大大節約了成本。因此作為移動端開發者,一定要學會使用手機系統與H5頁面的互調,下面介紹一下An

AndroidH5調(通過實例來了解Hybrid App)

ext 傳感器 顯示 相同 blank show ima 一次 點擊 前些日子,Android原生開發將被取締的吵得火熱,JavaScript是能做一個完全的APP,但只使用JavaScript做出來的APP也不會牛逼到哪裏去。最好的是混合(Hybrid)開發,在需要的

androidh5調

Java程式碼與H5互調 介面佈局就不說了,一個按鈕 主要是核心程式碼 package com.example.androi_h5; import android.app.Activity; import android.os.Bundle; import andro

WebView詳解簡單AndroidH5調

為什麼要學習Android與H5互調? 微信,QQ空間等大量軟體都內嵌了H5,不得不說是一種趨勢。Android與H5互調可以讓我們的實現混合開發,至於混合開發就是在一個App中內嵌一個輕量級的瀏覽器,一部分原生的功能改為Html 5來開發。  優勢:使用H5實現的功能能夠在不升級App的情況下動態更

WebView詳解簡單實現AndroidH5調

本篇文章已授權微信公眾號 guolin_blog (郭霖)獨家釋出 為什麼要學習Android與H5互調? 微信,QQ空間等大量軟體都內嵌了H5,不得不說是一種趨勢。Android與H5互調可以讓我們的實現混合開發,至於混合開發就是在一個App中內嵌

【轉】AndroidH5調

原文地址:http://blog.csdn.net/hpc19950723/article/details/70881226 前言         微信,微博,微商,QQ空間,大量的軟體使用內嵌了H5,這個時候就需要了解Android如何更H5互動的了;有些外包公司,

AndroidH5介面的互動(引數傳)以及遇到的一些問題

前言 在開發專案時,有部分介面是H5介面,原本以為直接載入H5介面就能搞定,後來還是遇到引數互傳問題了,然後網上意見不一,只好自己摸索,下面就給大家聊聊我遇到的問題~~~ 1.先給大家看看成功之後的介面跳轉: 解釋一下: 介面跳轉流程: 首頁的限時

分布式系統的那些事兒(三) - 系統系統之間調

數據格式 轉換 處理 分布 互調 圖片處理 動作 人性 並且 系統與系統之間的調用通俗來講,分為本地同一臺服務器上的服務相互調用與遠程服務調用,這個都可以稱之為RPC通信。淺白點講,客戶訪問服務器A,此時服務器要完成某個動作必須訪問服務器B,服務器A與B互相通信,相互調用,

androidjs交

call tex meta roi version window 裏的 使用 過程 首先引用一篇文章,看過這篇文章基本上就明白android大致與js是如何交互的了 Android與HTML+JS交互入門 ----------------------------分割線---

dynamic-load-apk 插件宿主方法調

-a rstp com 不一致 host width blog clas 技術分享 新建項目 DlPluginHost,下載dynamic-load-apk源碼 1.將dynamic-load-apk 文件夾中的lib做為module導入到DlPlginHost 2.

CC++之間相互調

end att toolbar 處理 處理器 執行文件 客戶 c語言項目 title http://www.cnblogs.com/luxiaoxun/p/3405374.html 1、導出C函數以用於C或C++的項目 如果使用C語言編寫的DLL,希望從中導出函數給C或C+

Android高手進階教程(二十)之---AndroidJavaScript方法相互調用!

工程 orien lns asc eat element 加載 一個 creat 在Android中通過WebView控件,可以實現要加載的頁面與Android方法相互調用,我們要實現WebView中的addJavascriptInterface方法,這樣html才能調用a

window CentOS之間傳文件操作步驟

文件 entos nsf centos file 切換 文件的 賬戶 自動 工具:SecureCRT,Xshell。步驟一:安裝lrzsz軟件,root權限下。安裝lrzsz(zmodem)對於CentOS系統:1[root@www ~]# yum install lrzs

小程式 App H5 之間的區別

小程式的實現原理   根據微信官方的說明,微信小程式的執行環境有 3 個平臺,iOS 的 WebKit(蘋果開源的瀏覽器核心),Android 的 X5 (QQ 瀏覽器核心),開發時用的 nw.js(C++ 實現的 web 轉桌面應用)。 平臺渲染js 執行環境 iOSWKWe

iOS原生介面RN介面調及傳值

文章目錄 3. iOS原生與RN互調及傳值 3.1 RN跳轉原生介面 3.2 RN跳轉原生介面並傳值 3.3 RN跳轉原生介面並傳值後,原生介面再回調給RN介面相關資訊 3. 4. 原生頁面向RN頁面傳值

golang go語言C語言調,通過cgo

1. good links: http://tonybai.com/2012/09/26/interoperability-between-go-and-c/ http://www.mischiefblog.com/2014/06/26/example-cgo-golang

AndroidH5相機、相簿筆記

公司專案中android內嵌H5頁面,H5頁面需要選擇上傳圖片功能。H5的標籤無法調起android照相機和相簿功能,所以只能android進行處理。本人第一次做,借鑑網上諸多的程式碼,總結如下:

AppInterface,一套AndroidH5的混合開發框架

最近的工作主要是圍繞APP與內嵌H5開發而展開的,所以寫了個小框架,以期能提升客戶端童鞋與前端童鞋的開發效率。具有Android與H5兩部分內容,互相搭配使用,介面簡潔,執行效率高,使用簡便,能極大的提升開發效率。 下方是github地址: https:/

Android h5 js互動問題,初步瞭解。

接觸Android也算很久了,但是js互動一直不熟也可以說是沒認真接觸過。今天專案修改也完成了,閒來無事忽然想起了這個問題,上網查找了一下,初步瞭解了一下。自己也寫了demo還算ok! 廢話不多說了,咱直接來說一下。(寫這個呢可能幫不到太多人,但是想讓自己印象深刻一些!) 首先,js互動分為