Android應(yīng)用中怎么實(shí)現(xiàn)與H5互調(diào)?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
成都創(chuàng)新互聯(lián)公司專(zhuān)業(yè)為企業(yè)提供長(zhǎng)樂(lè)網(wǎng)站建設(shè)、長(zhǎng)樂(lè)做網(wǎng)站、長(zhǎng)樂(lè)網(wǎng)站設(shè)計(jì)、長(zhǎng)樂(lè)網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、長(zhǎng)樂(lè)企業(yè)網(wǎng)站模板建站服務(wù),10多年長(zhǎng)樂(lè)做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
案例一:Java與Js簡(jiǎn)單互調(diào)
首先,在Android代碼中加載H5頁(yè)面:
private void initWebView() { webView = new WebView(this); WebSettings webSettings = webView.getSettings(); //設(shè)置支持javaScript腳步語(yǔ)言 webSettings.setJavaScriptEnabled(true); //支持雙擊-前提是頁(yè)面要支持才顯示 webSettings.setUseWideViewPort(true); //支持縮放按鈕-前提是頁(yè)面要支持才顯示 webSettings.setBuiltInZoomControls(true); //設(shè)置客戶(hù)端-不跳轉(zhuǎn)到默認(rèn)瀏覽器中 webView.setWebViewClient(new WebViewClient()); //加載網(wǎng)絡(luò)資源 //webView.loadUrl("http://atguigu.com/teacher.shtml"); webView.loadUrl("file:///android_asset/JavaAndJavaScriptCall.html"); //顯示頁(yè)面 setContentView(webView); }
JavaAndJavaScriptCall.html:
谷粉
Java調(diào)用javaScript:
/** * Java調(diào)用javaScript * @param numebr */ private void login(String numebr) { webView.loadUrl("javascript:javaCallJs("+"'"+numebr+"'"+")"); setContentView(webView); }
JavaScript調(diào)用Java
/** * js可以調(diào)用該類(lèi)的方法 */ class AndroidAndJSInterface{ @JavascriptInterface public void showToast(){ Toast.makeText(JavaAndJSActivity.this, "我被js調(diào)用了", Toast.LENGTH_SHORT).show(); } } //與此同時(shí)需要在webview當(dāng)中注冊(cè),后面的“Android”與html中的對(duì)應(yīng): webView.addJavascriptInterface(new AndroidAndJSInterface(),"Android"); //html里的點(diǎn)擊事件實(shí)現(xiàn):
案例二:H5頁(yè)面調(diào)用Android播放視頻
了解了簡(jiǎn)單調(diào)用,下面講的這個(gè)也就簡(jiǎn)單了:
1_JsCallJavaVideoActivity的布局和實(shí)例化控件
<?xml version="1.0" encoding="utf-8"?>
2_實(shí)例化控件并且配置
public class JsCallJavaVideoActivity extends Activity { private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_js_call_java_video); webView = (WebView) findViewById(R.id.webview); WebSettings webSettings = webView.getSettings(); //設(shè)置支持javaScript腳步語(yǔ)言 webSettings.setJavaScriptEnabled(true); //支持雙擊-前提是頁(yè)面要支持才顯示 // webSettings.setUseWideViewPort(true); //支持縮放按鈕-前提是頁(yè)面要支持才顯示 webSettings.setBuiltInZoomControls(true); //設(shè)置客戶(hù)端-不跳轉(zhuǎn)到默認(rèn)瀏覽器中 webView.setWebViewClient(new WebViewClient()); //加載網(wǎng)絡(luò)資源 // webView.loadUrl("http://atguigu.com/teacher.shtml"); webView.loadUrl("file:///android_asset/RealNetJSCallJavaActivity.htm"); } }
3_加載頁(yè)面
//加載本地資源 webView.loadUrl("file:///android_asset/RealNetJSCallJavaActivity.htm");
4_參照js代碼寫(xiě)Java被調(diào)用代碼
url = "/mobiles/interActive/65411"; var videourl = "http://10.0.2.2:8080/yellow.mp4"; var itemid = "65411"; var itemdesc = "1級(jí)單殺小龍,5級(jí)單殺峽谷先鋒!"; var itempic = "/upload/otherpic70/130803.jpg"; var itemtitle = "6.9瑪爾扎哈OP套路教程"; var obj_play = document.getElementById('play'); var obj_download = document.getElementById('download'); if(obj_play != null) { obj_play.ontouchstart = function() { this.className = 'inter_click'; javascript:android.playVideo(itemid, videourl, itemtitle); ajaxrequest('/stat/item', "POST", true, {type:'play', id:itemid}); } obj_play.ontouchend = function() { this.className = 'inter'; } }
5_配置Javascript接口
//設(shè)置支持js調(diào)用java webView.addJavascriptInterface(new AndroidAndJSInterface(),"android");
6_Javascript接口類(lèi)
class AndroidAndJSInterface { /** * 該方法將被js調(diào)用 * @param id * @param videoUrl * @param tile */ @JavascriptInterface public void playVideo(int id,String videoUrl,String tile){ //調(diào)起系統(tǒng)所有播放器 Intent intent = new Intent(); intent.setDataAndType(Uri.parse(videoUrl),"video/*"); startActivity(intent); } }
案例三:H5頁(yè)面調(diào)用Android撥打電話
1_JsCallJavaCallPhoneActivity布局
<?xml version="1.0" encoding="utf-8"?>
2_初始化WebView并且配置
private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_js_call_java_video); webView = (WebView) findViewById(R.id.webview); WebSettings webSettings = webView.getSettings(); //設(shè)置支持javaScript腳步語(yǔ)言 webSettings.setJavaScriptEnabled(true); //支持雙擊-前提是頁(yè)面要支持才顯示 // webSettings.setUseWideViewPort(true); //支持縮放按鈕-前提是頁(yè)面要支持才顯示 webSettings.setBuiltInZoomControls(true); //設(shè)置客戶(hù)端-不跳轉(zhuǎn)到默認(rèn)瀏覽器中 webView.setWebViewClient(new WebViewClient()); //設(shè)置支持js調(diào)用java webView.addJavascriptInterface(new AndroidAndJSInterface(), "Android"); //加載本地資源 // webView.loadUrl("http://atguigu.com/teacher.shtml"); webView.loadUrl("file:///android_asset/JsCallJavaCallPhone.html"); }
3_加載JsCallJavaCallPhone.html頁(yè)面
//加載本地資源 // webView.loadUrl("http://atguigu.com/teacher.shtml"); webView.loadUrl(file:///android_asset/JsCallJavaCallPhone.html);
4_從java代碼傳遞json數(shù)據(jù)給javascript
class AndroidAndJSInterface { /** * 該方法將被js調(diào)用,用于加載數(shù)據(jù) */ @JavascriptInterface public void showcontacts() { // 下面的代碼建議在子線程中調(diào)用 String json = "[{\"name\":\"阿福\", \"phone\":\"18600012345\"}]"; // 調(diào)用JS中的方法 webView.loadUrl("javascript:show('" + json + "')"); } }
5_撥打電話代碼
class AndroidAndJSInterface { /** * 該方法將被js調(diào)用,用于加載數(shù)據(jù) */ @JavascriptInterface public void showcontacts() { // 下面的代碼建議在子線程中調(diào)用 String json = "[{\"name\":\"阿福\", \"phone\":\"18600012345\"}]"; // 調(diào)用JS中的方法 webView.loadUrl("javascript:show('" + json + "')"); } /** * 撥打電話 * @param phone */ public void call(String phone) { Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phone)); // startActivity(intent); } }
6_h6頁(yè)面:
Insert title here
姓名 | 電話 |
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。