首页 > 趣闻 > 正文内容

移动混合开发:Web端JS调用Java接口的最佳实践解析

趣闻2025-05-28 04:03:06

鈥?strong>鈥嬧€滅綉椤典笂鐨勪竴涓寜閽紝鍜嬪氨鑳芥墦寮€鎵嬫満鎽勫儚澶达紵H5椤甸潰鍑粈涔堣皟鐢ㄥ師鐢熷姛鑳斤紵鈥濃€?/strong>鈥?br/> 鍘诲勾甯湅鍙嬪叕鍙告晳鐏紝浠栦滑鐢ㄦ贩鍚堝紑鍙戝仛鐨勬斂鍔pp鍑轰簡澶ч棶棰樷€斺€斿競姘戜笂浼犺韩浠借瘉鐓х墖鏃讹紝瀹夊崜鏈哄崄娆℃湁涓夋闂€€銆傛煡鍒版渶鍚庡彂鐜帮紝灞呯劧鏄€?strong>鈥婮S璋冪敤Java鎺ュ彛鏃舵病澶勭悊濂藉浘鐗囧帇缂┾€?/strong>鈥嬶紒浠婂ぉ鍜变滑灏辨幇寮€鎻夌浜嗚亰锛屾€庝箞璁¦eb鍜屽師鐢熺椤虹晠瀵硅瘽銆?/p>


涓€銆佸熀纭€涓夋澘鏂э細閫夊閫氫俊濮垮娍寰堥噸瑕?/h2>

鈥?strong>鈥嬧€滃惉璇存湁涓冨叓绉嶈皟鐢ㄦ柟寮忥紝鏂版墜璇ョ敤鍝釜锛熲€濃€?/strong>鈥?br/> 鍒厡锛佽浣忚繖涓変釜鏈€绋冲綋鐨勫璺紝鑳借В鍐?0%鐨勯渶姹傦細

鈻嶁€?strong>鈥嬫柟妗堝姣旇〃鈥?/strong>鈥嬶紙寤鸿鏀惰棌锛夛細

鏂规硶閫傜敤鍦烘櫙浼樼偣鍧戠偣棰勮
@JavascriptInterface绠€鍗曟暟鎹紶閫?/td>鈥?strong>鈥嬪畼鏂硅璇佹渶瀹夊叏鈥?/strong>鈥?/td>瀹夊崜4.2+蹇呴』鍔犳敞瑙?/td>
URL Scheme鎷︽埅澶嶆潅鍙傛暟浼犻€?/td>鏀寔JSON绛夌粨鏋勫寲鏁版嵁闇€瑕佽嚜宸辫璁″崗璁牸寮?/td>
WebView鎺у埗鍙?/td>璋冭瘯鍦烘櫙涓嶇敤鏀逛唬鐮佸揩閫熼獙璇?/td>缁濆绂佹涓婄敓浜х幆澧冿紒

鈥?strong>鈥嬸煂?涓句釜鐪熷疄妗堜緥鈥?/strong>鈥嬶細
鏀垮姟App閲屾湁涓€愭壂鐮佺櫥褰曘€戝姛鑳斤紝Web椤甸潰鐐规寜閽敜璧峰師鐢熸壂鐮併€?br/> 鐢║RL Scheme鏂规鐨勮瘽锛?/p>

  1. JS绔彂鎸囦护锛?code>window.location.href='govapp://scan?type=qr&callback=scanResult'
  2. Java绔嫤鎴В鏋愶紝鎵畬鍥炰紶鏁版嵁锛?/li>
java澶嶅埗
webView.loadUrl("javascript:scanResult('"+result+"')");

浜屻€佸弬鏁颁紶閫掔敓瀛樻寚鍗楋細鍒鏁版嵁鍙樻潃鎵?/h2>

鈥?strong>鈥嬧€滀负浠€涔堜紶涓浘鐗囩粡甯窸OM宕╂簝锛熲€濃€?/strong>鈥?br/> 瑙佽繃澶浜虹洿鎺ユ妸base64濉炵粰Java绔紝4MB鐨勫浘鐗囧彉8MB瀛楃涓诧紝鍐呭瓨涓嶇偢鎵嶆€紒璁颁綇杩欎笁涓繚鍛藉師鍒欙細

  1. 鈥?strong>鈥嬭兘浼犺矾寰勫氨鍒紶鏁版嵁鈥?/strong>鈥嬶細
javascript澶嶅埗
// 閿欒绀鸿寖 鉂?/span>
AndroidBridge.uploadImage(base64Str); 

// 姝g‘濮垮娍 鉁? 
AndroidBridge.getImagePath().then(path => {
    // Java绔繑鍥炴湰鍦版枃浠惰矾寰勫啀澶勭悊
});
  1. 鈥?strong>鈥嬫暟瀛楃被鍨嬭杞崲鈥?/strong>鈥嬶細
    JS閲岀殑Number鍙兘鏄痙ouble锛孞ava绔敤int鎺ユ敹鐩存帴宕╂簝銆傝寰楀湪Java渚у仛绫诲瀷鏍¢獙锛?/li>
java澶嶅埗
@JavascriptInterface
public void setFontSize(Object size) {
    int fontSize = (size instanceof Double) ? 
        ((Double)size).intValue() : 16;
}
  1. 鈥?strong>鈥嬫棩鏈熸牸寮忕粺涓€鏃跺尯鈥?/strong>鈥嬶細
    閬囧埌杩囪法鏃跺尯鐢ㄦ埛浼犲弬閿欒鍚楋紵寮哄埗绾﹀畾鐢║TC鏃堕棿鎴筹細
javascript澶嶅埗
// JS绔?/span>
const timestamp = new Date().getTime(); 
AndroidBridge.setDeadline(timestamp);

涓夈€佸紓甯稿鐞嗛粦绉戞妧锛氳Crash鏃犲鍙€?/h2>

鈥?strong>鈥嬧€滀负浠€涔堟祴璇曞ソ濂界殑锛屼笂绾垮氨闂€€锛熲€濃€?/strong>鈥?br/> 娣峰悎寮€鍙戠殑宕╂簝80%鍑哄湪閫氫俊鐜妭銆傚垎浜嚑涓疄鎴橀獙璇佽繃鐨勯槻宕╂妧宸э細

鈻嶁€?strong>鈥嬮槻寰℃€х紪绋嬩笁浠跺鈥?/strong>鈥嬶細

  1. 鎺ュ彛鍏煎鎬у垽鏂細
javascript澶嶅埗
// 鍏堟娴嬫槸鍚﹀瓨鍦ㄥ啀璋冪敤
if(window.AndroidBridge?.getLocation) {
    AndroidBridge.getLocation();
} else {
    // 闄嶇骇鍒癏5瀹氫綅
}
  1. 鍙屽悜蹇冭烦妫€娴嬶細
    Java绔瘡30绉掔粰JS鍙戜釜鏃堕棿鎴筹紝JS鏀跺埌鍚庡洖浼犮€傝秴杩?娆℃病鍝嶅簲灏卞脊绐楁彁绀猴細
java澶嶅埗
// Java瀹氭椂浠诲姟
handler.postDelayed(() -> {
    webView.loadUrl("javascript:heartbeat('"+System.currentTimeMillis()+"')");
}, 30000);
  1. 閿欒杈圭晫鎷︽埅锛堝畨鍗撶壒鏈夛級锛?br/> 閲嶅啓WebViewClient鎹曡幏JS閿欒锛?/li>
java澶嶅埗
webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onReceivedError(WebView view, int errorCode, 
        String description, String failingUrl) {
        // 鎶奐S閿欒杞彂鍒癗ative鐩戞帶骞冲彴
    }
});

鍥涖€佹€ц兘浼樺寲楠氭搷浣滐細娴佺晠寰楀儚寰疯姍

鈥?strong>鈥嬧€滀负浠€涔堣皟鐢ㄦ帴鍙e悗椤甸潰鍙樺崱锛熲€濃€?/strong>鈥?br/> 鍘诲勾浼樺寲杩囦竴涓ぞ鍖篈pp锛孞S璋冨師鐢熺浉鍐屾椂锛宨OS涓濊埇椤烘粦锛屽畨鍗撳嵈鍗℃垚PPT銆傚悗鏉ュ彂鐜版槸鈥?strong>鈥嬮绻佽法绾跨▼閫氫俊鎯圭殑绁糕€?/strong>鈥嬨€傝浣忚繖涓や釜浼樺寲澶ф嫑锛?/p>

  1. 鈥?strong>鈥嬫壒閲忓鐞嗙瓥鐣モ€?/strong>鈥嬶細
    鍒儚鎸ょ墮鑶忎竴鏍烽绻佽皟鎺ュ彛锛佹妸澶氫釜鎿嶄綔鎵撳寘澶勭悊锛?/li>
javascript澶嶅埗
// 鍘熷璋冪敤 鉂?/span>
AndroidBridge.setTitle('棣栭〉');
AndroidBridge.setTheme('blue');
AndroidBridge.setFontSize(16);

// 浼樺寲鐗?鉁? 
AndroidBridge.batchUpdate({
    title: '棣栭〉',
    theme: 'blue',
    fontSize: 16
});
  1. 鈥?strong>鈥嬩簩杩涘埗鏁版嵁璧伴€氶亾鈥?/strong>鈥嬶細
    闇€瑕佷紶杈撳浘鐗?鏂囦欢鏃讹紝鐢˙lob浠f浛base64锛?/li>
java澶嶅埗
// Java绔?/span>
@JavascriptInterface
public void uploadBlob(String blobData) {
    byte[] bytes = Base64.decode(blobData.split(",")[1], Base64.DEFAULT);
    // 鐩存帴鎿嶄綔瀛楄妭鏁扮粍
}

璇寸偣寰楃姜浜虹殑澶у疄璇?/h2>

骞蹭簡浜斿勾娣峰悎寮€鍙戯紝瑙佽繃澶鍥㈤槦鍦ㄨ繖鏍借窡澶淬€備笂涓湀鏈変釜鍒涗笟鍏徃鑰佹澘璺熸垜璇夎嫤锛岃鑺变簡20涓囧仛鐨凙pp鐢ㄤ笁涓湀灏卞純鍧戯紝鏍规湰鍘熷洜灏辨槸鈥?strong>鈥婮S鍜孞ava閫氫俊璁捐澶鏀锯€?/strong>鈥嬨€傚垎浜笁涓娉暀璁細

  1. 鈥?strong>鈥嬪埆鐩镐俊鍓嶇浼犵殑浠讳綍鍙傛暟鈥?/strong>鈥嬶紒鏇剧粡鏈塇5椤甸潰浼犱簡涓?null"瀛楃涓诧紝瀵艰嚧Java绔В鏋怞SON鏃剁洿鎺ュ穿婧冦€傜幇鍦ㄦ墍鏈夋帴鍙i兘寮哄埗鍋氱被鍨嬫牎楠屻€?/p>

  2. 鈥?strong>鈥嬬増鏈吋瀹硅鍐欏湪DNA閲屸€?/strong>鈥嬨€傚幓骞存煇涓畨鍗撶郴缁熷崌绾э紝瀵艰嚧@JavascriptInterface澶辨晥锛屽叏鍏徃閫氬鏀逛唬鐮併€傜幇鍦ㄦ墍鏈夐」鐩兘鍔犱袱濂楅€氫俊鏂规鍋氬鐢ㄣ€?/p>

  3. 鈥?strong>鈥嬬洃鎺ф瘮鍔熻兘鏇撮噸瑕佲€?/strong>鈥嬨€傛垜浠湪閫氫俊灞傚煁浜?7涓煁鐐癸紝鑳藉疄鏃剁湅鍒版帴鍙h皟鐢ㄦ垚鍔熺巼銆傛浘缁忛潬杩欎釜鎻愬墠鍙戠幇鏌愭満鍨嬪吋瀹规€ч棶棰橈紝閬垮厤浜嗗ぇ闈㈢Н瀹㈣瘔銆?/p>

鏈€鍚庤鍙ユ帍蹇冪獫瀛愮殑璇濓細鈥?strong>鈥嬫贩鍚堝紑鍙戜笉鏄竾鑳借兌锛岀敤瀵逛簡鍦版柟鑳界渷50%鎴愭湰锛岀敤閿欎簡灏辨槸鏃犲簳娣卞潙鈥?/strong>鈥嬨€備笅娆′骇鍝佺粡鐞嗗啀鎻愨€淗5椤甸潰瑕佽皟鐢ㄥ師鐢熶汉鑴歌瘑鍒€濇椂锛岃寰楀厛缈诲嚭杩欑瘒鏂囩珷鎷嶄粬妗屼笂锛?/p>

搜索