??? 我是做Android開發(fā)的硼砰,最近公司要做Html與Android的混合式開發(fā),最重要的不是做混合式開發(fā)恶阴,而是讓我一個人冯事,既要寫H5的頁面又要寫Android血公,沒辦法,就是干岩饼。先看看視頻效果吧
遇到了一個讓我頭疼的問題薛夜,在Html中啟動Activity的頁面,雖然查了好多寞冯,但是也踩不少的坑。
首先說說Html啟動Android的Activity,直接上代碼
???? 在Html這邊也沒有多少吮龄,有很多種方法漓帚,但是我就說說我用到的這種午磁,用a標(biāo)簽的href來打開 毡们,在標(biāo)簽中寫main這是關(guān)鍵
??? <a href="main://?id=10000"> 啟動Activity</a>
至于頁面的布局衙熔,大家自己可以去寫红氯,這只是一個功能痢甘,下邊給大家說說重點(diǎn)茉贡,就是Android中的代碼,首先必須是要建一個工程的,而且混合式開發(fā)大家都知道Html代碼是要放在Android 的工程當(dāng)中去的王暗。
怎么建Android的工程就不說了俗壹,建好工程之后,將你的Html的代碼要放在assets的包下绷雏,建assets的包要和Java包在同級的目錄下
建好之后就將Html的代碼copy進(jìn)去涎显,接著,想要從Html啟動Android的Activity是不是首先要加載Html的代碼期吓,很easy,大家都知道有WebVie去加載箭跳。
webView = (WebView)findViewById(R.id.webview);
//? ? ? ? 設(shè)置支持js
? ? ? ? webView.getSettings().setJavaScriptEnabled(true);
//不調(diào)用瀏覽器
? ? ? ? webView.setWebViewClient(new WebViewClient());
//支持alert彈窗
? ? ? ? webView.setWebChromeClient(new WebChromeClient());
//添加js調(diào)用接口類谱姓,通過Android這個字段 調(diào)用這個類的方法
? ? ? ? //加載網(wǎng)頁
? ? ? ? webView.loadUrl("file:///android_asset/index.html");
寫完這些刨晴,大家就直接可以運(yùn)行Html了路翻,但是你想要在Html中啟動一個activity,那就接著看吧帚桩,
那么就需要在建立一個目標(biāo)Activity嘹黔,然后用重點(diǎn)來了再見好的Activity的AndroidManifest.xml注冊表里必須寫上這幾句儡蔓,
記得加上這幾句召锈。完了之后呢,是不是覺得就可以啟動了涨岁。梢薪。尝哆。秉撇。琐馆。
其實(shí)這樣還是不對的瘦麸,要在啟動之前重寫WebViewClient中的shouldOverrideUrlLoading方法來看一下就這樣
WebViewClient webViewClient = new WebViewClient() {
@Override public boolean shouldOverrideUrlLoading(WebView wv,String url) {
if(url== null)
return false;
try {if(url.startsWith("main://") ) {
Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(url));
startActivity(intent);return true;
}
}catch (Exception e) {
//防止crash (如果手機(jī)上沒有安裝處理某個scheme開頭的url的APP, 會導(dǎo)致crash)
? ? ? ? ? ? ? ? return false; }
wv.loadUrl(url);return true; }
};
private void initData() {
webView = (WebView)findViewById(R.id.webview);
//? ? ? ? 設(shè)置支持js
? ? ? ? webView.getSettings().setJavaScriptEnabled(true);
//不調(diào)用瀏覽器
? ? ? ? webView.setWebViewClient(webViewClient);
//支持alert
? ? ? ? webView.setWebChromeClient(new WebChromeClient());
//添加js調(diào)用接口類瞎暑,通過Android這個字段 調(diào)用這個類的方法
? ? ? ? //加載網(wǎng)頁
? ? ? ? webView.loadUrl("file:///android_asset/index.html");
}
到這了赌,就可以說完事具備勿她,直接運(yùn)行就ok了
啟動,說到以上就已經(jīng)可以了逢并,但是呢,剛才還有個沒處理呢背稼,那又是什么呢玻蝌,那就是傳值用的
來順便傳個值看看蟹肘。要傳過來是不是還要接收一下呢
txt_title = (TextView)findViewById(R.id.tv_title);
txt_show = (TextView)findViewById(R.id.tvshow);
Intent intent = getIntent();
String action = intent.getAction();
if (Intent.ACTION_VIEW.equals(action)) {
Uri uri = intent.getData();
if (uri != null) {
String id = uri.getQueryParameter("id");
String title = uri.getQueryParameter("title");
String dataString = uri.getQueryParameter("data");
txt_title.setText(title);
txt_show.setText(id+"111111111"+dataString);
}
}
這是用來接收值的,那么在Html頁面中改一下<a href="main://?id=10000&title=Html與Android的交互&data=這是要傳過來的值">啟動Activity</a>
好了俯树,簡單的就分享到這里帘腹,有需要源碼的friend,To contact me Wechat(13993365940)
HDFHFS