當前位置:首頁 » 安卓系統 » android與h5交互

android與h5交互

發布時間: 2022-04-15 09:48:37

㈠ android嵌入h5,怎麼交互

Android和H5之間的交互
hybrid App開發也不是什麼新鮮事了,其中native和h5之間的交互則是必不可少的。Android中是如何和H5交互的?
1、webView載入頁面
我們都知道在Android中是通過webView來載入html頁面的,根據HTML文件所在的位置不同寫法也不同:
//例如:載入assets文件夾下的test.html頁面
mWebView.loadUrl("file:///android_asset/test.html")
//例如:載入網頁
mWebView.loadUrl("http://www..com")

如果只是這樣調用mWebView.loadUrl()載入的話,那麼當你點擊頁面中的鏈接時,頁面將會在你手機默認的瀏覽器上打開。那如果想要頁面在App內中打開的話,那麼就得設置setWebViewClient:
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
mWebView.loadUrl(url);
return true;
}
}
});

2、Android本地通過java調用HTML頁面中的JavaScript方法
想要調用js方法那麼就必須讓webView支持
WebSettings webSettings = mWebView.getSettings();
//設置為可調用js方法
webSettings.setJavaScriptEnabled(true);

若調用的js方法沒有返回值,則直接可以調用mWebView.loadUrl("JavaScript:do()");其中do是js中的方法;若有返回值時我們可以調用mWebView.evaluateJavascript()方法:
mWebView.evaluateJavascript("sum(1,2)", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
Log.e(TAG, "onReceiveValue value=" + value);
}
});

js代碼如下:
<script type="text/javascript">
function sum(a,b){
return a+b;
}
function do(){
document.getElementById("p").innerHTML="hello world";
}
</script>

2、js調用Android本地Java方法
在Android4.2以上可以直接使用@JavascriptInterface註解來聲明,下面是在一個本地Java方法
public class JsInteration {
@JavascriptInterface
public String back() {
return "hello world";
}
}

定義完這個方法後再調用mWebView.addJavascriptInterface()方法:
mWebView.addJavascriptInterface(new JsInteration(), "android");

那麼在js中怎麼來調用呢?
<script type="text/javascript">
function s(){
//調用Java的back()方法
var result =window.android.back();
document.getElementById("p").innerHTML=result;
}

</script>

4、攔截HTML頁面中的點擊事件
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//判斷url攔截事件
if (url.equals("file:///android_asset/test2.html")) {
Log.e(TAG, "shouldOverrideUrlLoading: " + url);
startActivity(new Intent(MainActivity.this,Main2Activity.class));
return true;
} else {
mWebView.loadUrl(url);
return false;
}
}
});

以上就是Java調用js方法以及js調用Java方法的實現交互方式中的一種。下面給出完整代碼:
mainActivity
public class MainActivity extends AppCompatActivity {
public static final String TAG = "MainActivity";
private WebView mWebView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = (WebView) findViewById(R.id.webView);
mWebView.loadUrl("file:///android_asset/test.html");
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new JsInteration(), "android");
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.equals("file:///android_asset/test2.html")) {
Log.e(TAG, "shouldOverrideUrlLoading: " + url);
startActivity(new Intent(MainActivity.this,Main2Activity.class));
return true;
} else {
mWebView.loadUrl(url);
return false;
}
}
});
}
//Android調用有返回值js方法
@TargetApi(Build.VERSION_CODES.KITKAT)
public void onClick(View v) {

mWebView.evaluateJavascript("sum(1,2)", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
Log.e(TAG, "onReceiveValue value=" + value);
}
});
}
public class JsInteration {

@JavascriptInterface
public String back() {
return "hello world";
}
}
}

test.html
<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript">
function sum(a,b){
return a+b;
}
function s(){
var result =window.android.back();
document.getElementById("p").innerHTML=result;
}

</script>
</head>
<body>
<button onclick="s()">調用本地方法</button>
<a href="file:///android_asset/test2.html">點擊</a>
<p id="p"></p>
</body>
</html>

㈡ h5做app和原生app有什麼區別

原生app和h5做的app的區別:
1、開發方面的區別

目前React Native開發越來越火,微信小程序是基於React Native開發的,體驗接近原生APP,發展前景值得重視。不過好在現在非原生APP同樣可以調用藍牙、相機等硬體,也能順利發布到蘋果APP store。
移動Web App
1、因為運行在移動設備的瀏覽器上,所以只需要一個開發項目
2、這種應用可以使用HTML5,CSS3以及JavaScript以及伺服器端語言來完成(php,Ruby on Rails,Python)
3、這里可沒有標準的SDK,基本任意選擇別忘了有一些跨平台的開發工具,比如PhoneGap, Sencha Touch 2以及Appcelerator Titanium等等。
原生App
1、每一種移動操作系統都需要獨立的開發項目
2、每種平台都需要獨立的開發語言。Java(Android), Objective-C(iOS)以及Visual C++(Windows phone)等等
3、需要使用各自的軟體開發包,開發工具以及各自的控制項
2、能力方面的區別
移動Web App
只能使用有限的移動硬體設備功能。
原生App
能夠與移動硬體設備的底層功能,比如個人信息,攝像頭以及重力加速器等等。對於這一點感觸很深刻,2016年做新年H5營銷小活動的時候,就是因為沒有考慮到H5不能使用移動硬體端重力加速器而導致臨時替換設計方案。
3、獲取方法的區別
移動Web App
1、從移動設備上的瀏覽器訪問
2、不需要安裝額外的軟體
3、軟體更新只需要伺服器就夠了
4、因為現在沒有什麼商品或賣場提供這種App,不過一般都是嵌套在系統內部,或者內部系 統中使用
5、跨平台開發,用戶不需要去賣場來下載安裝App
6、需要過度依賴網路,沒有任何緩存數據
7、任何時候都可以發布App,因為根本不需要官方賣場的審核
8、如果你已經有了一個Web App,你可以使用 responsive web design來輔助改進
9、所有的用戶都是用同樣的版本
原生App
1、直接下載到設備
2、以獨立的應用程序運行(並不需要瀏覽器)
3、用戶必須手動去下載並安裝這些原生App
4、有一些商店與賣場來幫助用戶尋找你的App,app store裡面應有盡有。
5、原生型APP應用的安裝包相對較大,包含UI元素、數據內容、邏輯框架;
6、手機用戶無法上網也可訪問APP應用中以前下載的數據。
7、原生型的APP可以調用手機終端的硬體設備(語音、攝像頭、簡訊、GPS、藍牙、重力感應等)
8、APP應用更新新功能,涉及到每次要向各個應用商店進行提交審核。
9、用戶可以自由地選擇是否更新軟體版本,所以會出現不同用戶同時使用不同版本的情況
如果企業選擇商領雲進行定製開發原生app,需要單獨開發兩套系統即ios和安卓系統。如果是通過商領雲的在線製作app,則可以同時生成ios和安卓系統的app,並且還可以製作小程序、移動網站和微商城,非常方便,而且價格也只需幾萬左右,具體需要看功能需求。

㈢ HTML5能取代Android和iOS應用程序嗎

糾正一下,HTML5和Android和iOS不是平等關系,他是一種語言,只能和JAVA及OC對等

下面回答,不能,至少短期內(個人認為5~10年),原因如下:
1、Android是谷歌的,iOS是蘋果的,各家有各家的利益

2、Android主流開發語言是JAVA,iOS是OC,為什麼,OC是iOS的專用語言這個暫且不說,而之所以Android使用JAVA是看中了之前做J2EE和J2SE等,大量的JAVA開發人員,之所以Android火起來,不單是Android開源(使手機生產商的生產成本下降),更是大量的JAVA開發人員能夠快速的進入這個新興平台,從技術上(可以理解為大量的App發布)推動Android進步

3、成本問題,以上兩點其實都在說這個問題,用HTML5取代JAVA和OC,首先要考慮人力成本問題,要有大量HTML5開發人員這個前提條件,否則用人單位不會為此付出更多的人力成本和風險成本(主要的,會不會開發出來的東西效果很垃圾),而谷歌和蘋果開發Android和iOS更是花費了極大的成本,他們也不會願意看到自己的成果被別人竊取而損害自己的利益

4、性能問題,其實還是從成本角度出發,HTML5這個東西他再厲害是跑在瀏覽器上的,谷歌和蘋果怎麼可能在損害自己利益的情況下,還會花大價錢開發更高級的瀏覽器以適應HTML5(把HTML5跑的和應用程序一樣快),如果系統內置的瀏覽器達不到那個量級,外置瀏覽器都是扯淡,所以你會看到,HTML5好不好,很好,但是在Android和iOS上和原生應用程序比較,他就是慢,就是山寨,各種特效都出不來的情況下還談什麼HTML5

5、開發者問題,也是相輔相成的,看看現在市面上有幾個喜歡做WEB前端的就知道了,人才很少,價格很低(我也在招人,有感而發),這就導致更少的人去學去做,更不要說在Android和iOS平台上,HTML5要適應這兩個平台的規則,比如JS回調要在JAVA中執行的問題,這就導致你要學習HTML5就要多學習Android,那我為什麼不直接學Android,種種原因會導致HTML5(在手機平台)的開發者短期內不會爆發式增長(多說一嘴,要解決這個問題,兩種可能,1、像Android,原本就有那麼多JAVA開發者,而且這些JAVA開發者還做過手機,2、用人單位普遍的覺得HTML5好,從而願意花大價錢聘請HTML5開發者,從而抬高整體行業薪資,使跟風者不絕。目前看這兩種可能性都不存在)

6、語言成熟度,語言成熟度不是說SDK第幾版,語言本身是否還有漏洞這種問題,成熟度本身的意味其實就是「人」和「庫」,是「能否進行快速開發」,比如php效率低下,為什麼這么火,價格這么高,原因是漫天的完整源碼、框架、庫,是大量的有豐富經驗的開發者,是「快速開發」。HTML5?還差的太遠!所謂「成熟」,還得時間的積累

綜上,HTML5很新很火,那是在PC WEB平台,開發者少,收入不高,在Android和iOS平台上運行效率低,開發風險高,不成熟,所以我說「不能,至少短期內(個人認為5~10年)」

原創哦,親,純手打的,給個贊吧~

㈣ h5怎麼打開android app

如果你是自己開發的app嵌套的webview打開的h5,h5和app交互一下,通過自己的app打開其他的app很簡單,但是你要是從UC瀏覽器訪問個自己的h5,再點擊某個按鈕打開手機上的app是做不到的。

㈤ android h5 交互怎麼跳轉

是要攔截 點擊事件嗎?
攔截的話有兩種辦法
一個是 獲取點擊事件的標簽
二:截取url
webView.setWebViewClient(new WebViewClient() {
@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);

if (url.contains("攔截的網址") ) {

}

}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {

// 重寫此方法表明點擊網頁裡面的鏈接還是在當前的 webview里跳轉,不跳到瀏覽器那邊

view.loadUrl(url);
// if(url.contains("攔截的網址")){
//
// }else{
//
// }
Log.e("loadUrl", "" + url);
return true;
}

@Override

public void onReceivedSslError(WebView view,
SslErrorHandler handler, SslError error) {
// TODO Auto-generated method stub
super.onReceivedSslError(view, handler, error);
handler.proceed();
//handler1.sendEmptyMessage(0);
}

});

㈥ 淘寶,京東這種商城的APP都是用Android+h5語言來開發的嗎

一般比較大的平台都會採用Android原生+h5混合開發,這樣能取各方面的優點;
原生開發可以訪問設備中的所有功能,運行速度更快,性能更高,而且可以啟用優秀的離線處理和存儲能力等等,提供最佳的用戶體驗,最優質的用戶界面,最華麗的交互。

原生開發的缺點在逐漸的開發、運營過程中顯現出來。開發成本高,不同平台需要定製不同的app,也就是android定製apk,ios定製app,開發人員需要多平台多語言,人力成本、時間成本較多,通用性差;
H5開發是Html5開發的app,本質上運行在手機瀏覽器中的頁面,一般使用app做一個殼套用瀏覽器運行H5的頁面,由於H5的特性也有很多app使用半原生半H5的hybird app 開發模
H5有許多優點,特別針對原生開發的缺點。如:
直接在網頁上調試和修改,幾乎不用考慮用戶機型和適配的問題,針對原生開發的平台碎片化、開發人力成本、時間成本高;版本升級優勢,網頁的升級與用戶無關,用戶無需下載更新安裝,保證實時送達到用戶手中;上線時間穩定、快速,不需要通過開發市場的審核,有收入分成的開發市場更是可以繞過收入分成。除此以外在視頻媒體方面H5表現也十分優秀的。

H5的缺點有許多,當新技術出現時候許許多多的人都在吹噓它的優點,到真正實用時才對它的缺點正視。H5載入大圖片的時候性能會下降,大量用戶訪問同一個H5應用時性能會下降,響應速度比不上原生app,上網速度也不及原生app,H5不能自動處理動畫上反復交互(網頁游戲),需要藉助css3、javascript。

㈦ h5使用window.webkit.messagehandlers.dofunction.postmessage怎麼跟android交互

_rwWebView=[[WKWebView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
[_rwWebView.configuration.userContentController addScriptMessageHandler:self name:@"LoadScript"];
[_rwWebView.configuration.userContentController addScriptMessageHandler:self name:@"DoFunction"];
.
.
.
[self.view addSubview:_rwWebView];
NSURL *url=[[NSBundle mainBundle]URLForResource:@"index" withExtension:@"html"];
NSMutableURLRequest *tmpRequest=[[NSMutableURLRequest alloc] initWithURL:url];
tmpRequest.timeoutInterval=60;
[_rwWebView loadRequest:tmpRequest];

㈧ android和h5交互,js怎麼在android端列印日誌

Android和H5之間的交互hybridApp開發也不是什麼新鮮事了,其中native和h5之間的交互則是必不可少的。Android中是如何和H5交互的?1、webView載入頁面我們都知道在Android中是通過webView來載入html頁面的,根據HTML文件所在的位置不同寫法也不同://例如:載入assets文件夾下的test.html頁面mWebView.loadUrl("file:///android_asset/test.html")//例如:載入網頁mWebView.loadUrl("")如果只是這樣調用mWebView.loadUrl()載入的話,那麼當你點擊頁面中的鏈接時,頁面將會在你手機默認的瀏覽器上打開。那如果想要頁面在App內中打開的話,那麼就得設置setWebViewClient:mWebView.setWebViewClient(newWebViewClient(){@(WebViewview,Stringurl){mWebView.loadUrl(url);returntrue;}}});2、Android本地通過Java調用HTML頁面中的JavaScript方法想要調用js方法那麼就必須讓webView支持WebSettingswebSettings=mWebView.getSettings();//設置為可調用js方法webSettings.setJavaScriptEnabled(true);若調用的js方法沒有返回值,則直接可以調用mWebView.loadUrl("JavaScript:do()");其中do是js中的方法;若有返回值時我們可以調用mWebView.evaluateJavascript()方法:mWebView.evaluateJavascript("sum(1,2)",newValueCallback(){@(Stringvalue){Log.e(TAG,"onReceiveValuevalue="+value);}});js代碼如下:2、js調用Android本地Java方法在Android4.2以上可以直接使用@JavascriptInterface註解來聲明,下面是在一個本地Java方法publicclassJsInteration{@(){return"helloworld";}}定義完這個方法後再調用mWebView.addJavascriptInterface()方法:mWebView.addJavascriptInterface(newJsInteration(),"android");那麼在js中怎麼來調用呢?4、攔截HTML頁面中的點擊事件mWebView.setWebViewClient(newWebViewClient(){@(WebViewview,Stringurl){//判斷url攔截事件if(url.equals("file:///android_asset/test2.html")){Log.e(TAG,"shouldOverrideUrlLoading:"+url);startActivity(newIntent(MainActivity.this,Main2Activity.class));returntrue;}else{mWebView.loadUrl(url);returnfalse;}}});以上就是Java調用js方法以及js調用Java方法的實現交互方式中的一種。下面給出完整代碼:{publicstaticfinalStringTAG="MainActivity";privateWebViewmWebView;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mWebView=(WebView)findViewById(R.id.webView);mWebView.loadUrl("file:///android_asset/test.html");WebSettingswebSettings=mWebView.getSettings();webSettings.setJavaScriptEnabled(true);mWebView.addJavascriptInterface(newJsInteration(),"android");mWebView.setWebViewClient(newWebViewClient(){@(WebViewview,Stringurl){if(url.equals("file:///android_asset/test2.html")){Log.e(TAG,"shouldOverrideUrlLoading:"+url);startActivity(newIntent(MainActivity.this,Main2Activity.class));returntrue;}else{mWebView.loadUrl(url);returnfalse;}}});}//Android調用有返回值js方法@TargetApi(Build.VERSION_CODES.KITKAT)publicvoidonClick(Viewv){mWebView.evaluateJavascript("sum(1,2)",newValueCallback(){@(Stringvalue){Log.e(TAG,"onReceiveValuevalue="+value);}});}publicclassJsInteration{@(){return"helloworld";}}}test.html調用本地方法點擊

㈨ app內嵌的h5頁面交互上 可以跳轉打開app內的頁面嗎

可以的,具體我記不太清了,大致實現方法是進入H5頁面,js判斷是ios還是android或是h5,然後向ios和android索要起對應的方法,然後判斷是否有這個方法,如果有就交還給app

熱點內容
scratch少兒編程課程 發布:2025-04-16 17:11:44 瀏覽:625
榮耀x10從哪裡設置密碼 發布:2025-04-16 17:11:43 瀏覽:355
java從入門到精通視頻 發布:2025-04-16 17:11:43 瀏覽:70
php微信介面教程 發布:2025-04-16 17:07:30 瀏覽:295
android實現陰影 發布:2025-04-16 16:50:08 瀏覽:786
粉筆直播課緩存 發布:2025-04-16 16:31:21 瀏覽:336
機頂盒都有什麼配置 發布:2025-04-16 16:24:37 瀏覽:201
編寫手游反編譯都需要學習什麼 發布:2025-04-16 16:19:36 瀏覽:797
proteus編譯文件位置 發布:2025-04-16 16:18:44 瀏覽:354
土壓縮的本質 發布:2025-04-16 16:13:21 瀏覽:581