最近項目剛好有做到內(nèi)部HTML頁面跳轉(zhuǎn)原生頁面和html代碼啟動App頁面的功能樟遣,做完之后覺得相關(guān)知識可以整理一下
先說下項目所用到的js交互
android調(diào)取JS的方法
WebView直接加載js的方法就好了
代碼如下
WebView.loadUrl("javascript:function(arg)")
html調(diào)用Android原生方法
//重點(diǎn)實(shí)現(xiàn)代碼
WebView.addJavascriptInterface(Object object,String name)
Objcet 對象是自己創(chuàng)建的對象,整體代碼如下
public class AndroidJs{
@JavascriptInterface
public void test(){}
}
//webview code
WebView.addJavascriptInterface(new AndroidJs(),“AndroidJs” )
//html code
window.AndroidJs.test()
外部HTML啟動APP頁面
使用Scheme方案設(shè)置
在AndroidManifest.xml文件中對應(yīng)的頁面標(biāo)簽添加如下
<activity android:name="...">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="hostName"
android:path="path"
android:scheme="schemeName" />
</intent-filter>
</activity>
Android Develop <data>標(biāo)簽 官方文檔
Html代碼調(diào)用如下
<a href = "schemeName://hostName/path">
//需要帶參數(shù)的和http鏈接的get請求一樣
<a href = "schemeName://hostName/path?id=1&name=mark">
帶參數(shù)的調(diào)用 在Activity中的獲取方式
String action = getIntent().getAction();
if(!TextUtils.isEmpty(action)&&Intent.ACTION_VIEW.equal(action)){
Uri uri = getIntent().getData();
if(uri != null){
String id = uri.getQueryParameter("id");
String name = uri.getQueryParameter("name");
}
}
自定義WebView處理scheme格式鏈接
public void loadUrl(String url){
if(isSchemeUrl(url)){
Intent intent = new Intent();
intent.setData(Uri.parse(url));
startActivity(intent);
}
}
private boolean isSchemeUrl(String url) {
if (TextUtils.isEmpty(url))
return false;
String[] strs = url.split("://");
if (strs.length > 1) {
String host = strs[0];
if (host.equalsIgnoreCase("http") || host.equalsIgnoreCase("https"))
return false;
else
return true;
} else return false;
}
一上是本人在處理Android JS交互 和 html啟動APP的一些心得,如有問題,請各位留言