首先既然H5和本地app達到交互,所以得有個標識,通過這個標識來開啓app ,這時候就需要我們app端在manifest中的入口activity中添加scheme,也就是類似標識是的,這時候網頁端可以通過這個scheme來開啓我們的app,但是如果想要給我們app傳遞參數的話,那麼就不好使了,所以這時候還需要 添加host,就可以了,代碼如下
<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中如下操作,來獲取參數
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來獲取value
當然常用的還有使用webview來和js交互,這就很簡單了, 首先我們要先對webview進行一些設置, 第一條很關鍵,true表示和js可以交互, false反之
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中的方法
//第一個參數是 供給js調用的類,第二個參數是js中要用到的調用這個類中的方法的對象,可以隨便起
mWebView.addJavascriptInterface(new FromAndroid(context),
"AndroidToJs");
說一下,這裏的FromAndroid的這個類不能是內部類,不知爲何,反正我先用的是內部類,是調不出來裏面的方法,
/**
* 這是js從android調用方法的類
* @author Administrator * */
public
class
FromAndroid
{
Context context;
public
FromAndroid(Context context){
this.context = context;
}
public
void
fromAndroid(String name){
MyToastUtils.show(context, name);
}
}
在JS中代碼就更簡單了
function
showToast(){
AndroidToJs.fromAndroid("我是js調用android的吐司");
}
完畢!!!
2. 然後說下在Android中調用JS的方法
在Android中的代碼其實很簡單
//這是調用js中的方法
fragment7_btn.setOnClickListener(new OnClickListener() {
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就好了
完畢!!!!