首先既然H5和本地app達到交互,因此得有個標識,經過這個標識來開啓app ,這時候就須要咱們app端在manifest中的入口activity中添加scheme,也就是相似標識是的,這時候網頁端能夠經過這個scheme來開啓咱們的app,可是若是想要給咱們app傳遞參數的話,那麼就很差使了,因此這時候還須要 添加host,就能夠了,代碼以下javascript
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <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:scheme="abcd" android:host="hello"/> </intent-filter>
這樣就能夠了,H5就能夠打開咱們的app了,固然既然人家給咱們傳遞了參數,那麼咱們這邊確定要獲取的吧,因此咱們能夠在入口activity中以下操做,來獲取參數java
Intent intent = getIntent(); Uri uri = intent.getData(); String scheme = intent.getScheme(); tv_web.setVisibility(View.GONE); idnoH = uri.getQueryParameter("idno"); System.out.println(idnoH+"idno");
這裏的idno就是H5那麼傳遞參數的key,經過key來獲取valueandroid
固然經常使用的還有使用webview來和js交互,這就很簡單了, 首先咱們要先對webview進行一些設置, 第一條很關鍵,true表示和js能夠交互, false反之web
WebSettings set = mWebView.getSettings(); set.setJavaScriptEnabled(true);//設置是否直接javascript格式 set.setDefaultZoom(ZoomDensity.MEDIUM); //----設置縮放級別 set.setDefaultTextEncodingName("UTF-8");//---設置編碼格式 set.setAllowContentAccess(true); set.setAppCacheEnabled(false); set.setBuiltInZoomControls(false); set.setUseWideViewPort(true); set.setUseWideViewPort(true); set.setLoadWithOverviewMode(true);
1. 先說下,js調用Android中的方法app
//第一個參數是 供給js調用的類,第二個參數是js中要用到的調用這個類中的方法的對象,能夠隨便起 mWebView.addJavascriptInterface(new FromAndroid(context), "AndroidToJs");
說一下,這裏的FromAndroid的這個類不能是內部類,不知爲什麼,反正我先用的是內部類,是調不出來裏面的方法,ide
/** * 這是js從android調用方法的類 * @author Administrator * */ public class FromAndroid { Context context; public FromAndroid(Context context){ this.context = context; } @JavascriptInterface public void fromAndroid(String name){ MyToastUtils.show(context, name); } }
在JS中代碼就更簡單了ui
function showToast(){ AndroidToJs.fromAndroid("我是js調用android的吐司"); }
完畢!!!this
2. 而後說下在Android中調用JS的方法編碼
在Android中的代碼其實很簡單code
//這是調用js中的方法 fragment7_btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mWebView.loadUrl("javascript:fromJS('嘎嘎')"); } });
說明下, 這裏fromJS()這個方法是JS中的方法名, 而裏面的參數是android部分能夠傳給js的,而後就能夠修改到網頁中的內容,固然也能夠不傳,直接在js端寫死了,android部分調用,直接顯示就能夠
在JS端的代碼
function fromJS(param) { alert(param); document.getElementById('fromJS').innerHTML="我是android調用JS的方法"; showToast(); document.getElementById('fromJS').innerHTML=param; }
這裏的fromJS的這個ID其實就是一個div,爲了就是直接顯示出來,還如上面說的同樣,若是不用android傳參數,直接fromJS()這個方法中param就不用寫,直接一個無參的方法,而後JS端這邊相似"我是android調用的JS方法" 這樣,寫死就行了; 若是想用android傳參,並顯示,直接把param賦值給div就行了
完畢!!!!