Android與Html5、JS做交互分爲兩種情況。
1. Html5調用Android的方法
在Android上展示Html5的頁面是通過控件WebView實現的,這我們都知道。而Html端若想調用Android的東西,只能通過Android端在load這個界面之前,給WebVeiw添加一個對象,然後Html端去獲取這個對象。
通過這個對象我們可以做很多東西,因爲Html端獲得這個對象後就可以調取這個對象內的任意方法。例如:傳值、跳轉等。
首先來看Android端需要做的:
1. 創建一個對象;
2. 在onCreate()中講這個對象傳遞過去;
3. load這個頁面;
代碼如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
wv_main_body = (WebView) findViewById(R.id.wv_main_body);
// 把本類的一個實例添加到js的全局對象window中,
wv_main_body.addJavascriptInterface(new InJavaScript(this), "android_lvstudio");
wv_main_body.loadUrl("file:///android_asset/webpage.html");
}
`/**
* 需要傳遞給Html端的對象類
* @author LvStudio
*
*/
final class InJavaScript {
private Context context;
public InJavaScript() {
}
/**
* 由於涉及到了跳轉,上下文對象Context需要通過構造傳過來。當然也可以傳其他東西。
*
* @param context
*/
public InJavaScript(Context context) {
this.context = context;
}
/**
* 簡單的點擊跳轉,不涉及參數及返回值。
*/
@JavascriptInterface
public void goNext() {
Intent it = new Intent(context, OtherActivity.class);
context.startActivity(it);
}
/**
* 通過獲取Html端的參數,進行操作後,將結果返回給Html端。
*
* 此處可進行本地數據庫操作,網絡請求等,適需求而定。
*
* @param num1
* @param num2
* @return
*/
@JavascriptInterface
public int queryData(int num1, int num2) {
int sum = 0;
sum = num1 + num2;
return sum;
}
}`
**然後是Html端需要做的就是通過這個對象調用相應的方法。**
代碼如下:
window.android_lvstudio.goNext();// 跳轉
var sum = window.android_lvstudio.queryData(1,1); // 傳值比獲取返回值
2. Android調用Html5的方法
這塊的操作就比較簡單了,直接通過loadUrl()就可以了。
簡單的傳字符串過去,代碼如下:
wv_main_body.loadUrl("javascript:writeInAndroid("+"這是傳給Html端的參數"+")");// 向Html頁面傳值
加班中倉促~~~,注意事項稍後補充。