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.效果
- 輸入賬號密碼,將使用者名稱作為引數傳遞到網頁中(java調js)
- 點選網頁中的按鈕,彈出提示(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
- 步驟
- 配置JavaScript介面
- 實現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 一致。
相關推薦
android與h5之間的互調
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
Android與H5互調(通過實例來了解Hybrid App)
ext 傳感器 顯示 相同 blank show ima 一次 點擊 前些日子,Android原生開發將被取締的吵得火熱,JavaScript是能做一個完全的APP,但只使用JavaScript做出來的APP也不會牛逼到哪裏去。最好的是混合(Hybrid)開發,在需要的
android與h5互調
Java程式碼與H5互調 介面佈局就不說了,一個按鈕 主要是核心程式碼 package com.example.androi_h5; import android.app.Activity; import android.os.Bundle; import andro
WebView詳解與簡單Android與H5互調
為什麼要學習Android與H5互調? 微信,QQ空間等大量軟體都內嵌了H5,不得不說是一種趨勢。Android與H5互調可以讓我們的實現混合開發,至於混合開發就是在一個App中內嵌一個輕量級的瀏覽器,一部分原生的功能改為Html 5來開發。 優勢:使用H5實現的功能能夠在不升級App的情況下動態更
WebView詳解與簡單實現Android與H5互調
本篇文章已授權微信公眾號 guolin_blog (郭霖)獨家釋出 為什麼要學習Android與H5互調? 微信,QQ空間等大量軟體都內嵌了H5,不得不說是一種趨勢。Android與H5互調可以讓我們的實現混合開發,至於混合開發就是在一個App中內嵌
【轉】Android與H5互調
原文地址:http://blog.csdn.net/hpc19950723/article/details/70881226 前言 微信,微博,微商,QQ空間,大量的軟體使用內嵌了H5,這個時候就需要了解Android如何更H5互動的了;有些外包公司,
Android與H5介面的互動(引數互傳)以及遇到的一些問題
前言 在開發專案時,有部分介面是H5介面,原本以為直接載入H5介面就能搞定,後來還是遇到引數互傳問題了,然後網上意見不一,只好自己摸索,下面就給大家聊聊我遇到的問題~~~ 1.先給大家看看成功之後的介面跳轉: 解釋一下: 介面跳轉流程: 首頁的限時
分布式系統的那些事兒(三) - 系統與系統之間的調用
數據格式 轉換 處理 分布 互調 圖片處理 動作 人性 並且 系統與系統之間的調用通俗來講,分為本地同一臺服務器上的服務相互調用與遠程服務調用,這個都可以稱之為RPC通信。淺白點講,客戶訪問服務器A,此時服務器要完成某個動作必須訪問服務器B,服務器A與B互相通信,相互調用,
android與js交互
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.
C與C++之間相互調用
end att toolbar 處理 處理器 執行文件 客戶 c語言項目 title http://www.cnblogs.com/luxiaoxun/p/3405374.html 1、導出C函數以用於C或C++的項目 如果使用C語言編寫的DLL,希望從中導出函數給C或C+
Android高手進階教程(二十)之---Android與JavaScript方法相互調用!
工程 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
Android與H5相機、相簿筆記
公司專案中android內嵌H5頁面,H5頁面需要選擇上傳圖片功能。H5的標籤無法調起android照相機和相簿功能,所以只能android進行處理。本人第一次做,借鑑網上諸多的程式碼,總結如下:
AppInterface,一套Android與H5的混合開發框架
最近的工作主要是圍繞APP與內嵌H5開發而展開的,所以寫了個小框架,以期能提升客戶端童鞋與前端童鞋的開發效率。具有Android與H5兩部分內容,互相搭配使用,介面簡潔,執行效率高,使用簡便,能極大的提升開發效率。 下方是github地址: https:/
Android 與 h5 js互動問題,初步瞭解。
接觸Android也算很久了,但是js互動一直不熟也可以說是沒認真接觸過。今天專案修改也完成了,閒來無事忽然想起了這個問題,上網查找了一下,初步瞭解了一下。自己也寫了demo還算ok! 廢話不多說了,咱直接來說一下。(寫這個呢可能幫不到太多人,但是想讓自己印象深刻一些!) 首先,js互動分為