Android中的Serializable、Parcelable">Android中的Serializable、Parcelable
944
2025-04-02
現(xiàn)在的很多app項目中都有嵌入html的需求,這么設(shè)計產(chǎn)品有很多好處,一個html可以同時在很多平臺上跑(Android,ios,web端)。
從Android 角度來講 加載html所用的組件是 webview。
webview的好處我們其實都清楚:1.可以直接顯示和渲染web頁面
2.直接顯示網(wǎng)頁webview可以直接用html文件(網(wǎng)絡(luò)上或本地assets中)作布局
3.可以和JavaScript交互調(diào)用
但是同時,也給我們帶來一些問題,比如在html上面有一些 超鏈接形式的附件:xxx.pdf ,xxx.doc等等。
ios是可以直接解析加載出這些文件的,估計這個是ios瀏覽器內(nèi)核強大的原因,但是android 默認(rèn)是無法解析顯示出這種附件的。
android的 webview只是一個對瀏覽器內(nèi)核的封裝,本身不具備打開word,excel,ppt,pdf文件的功能,即使可以打開,也必須借助第三方的專用插件或者poi庫。
ios的效果是默認(rèn)在當(dāng)前界面可以直接打開附件的文件,產(chǎn)品認(rèn)為這個android肯定也可以做到(無法和產(chǎn)品解釋,解釋太多就是自己菜)。
但是我從網(wǎng)上查找資料的時候發(fā)現(xiàn)android如果想在線閱讀的話,可以用google提供的在線解析pdf功能
Java代碼
WebView webview = (WebView) findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
String pdf ="http://..../a.pdf";
webview.loadUrl("http://docs.google.com/gview?embedded=true&url=" + pdf);
本來很高興,但是仔細(xì)觀察url,根本就是在扯,這訪問的是goole啊 ,怎么能保證用戶的每個手機都能連接vpn 訪問谷歌呢。 所以這種方法根本行不通。
繼續(xù)研究 還有兩種方法
1.如果想在線閱讀,但是又不想使用google提供的在線解析的話,本地需要安裝對應(yīng)的插件,比如pdf插件,word插件等。就像用ie,firefox播放flash一樣,需要安裝flash插件。
2.如果想用webview直接打開本地的pdf文件啥的,可以使用apache的poi來解析word,excel,ppt,pdf等。也就是說,需要使用poi開發(fā)你的webview程序。
這兩種方法第一種是要單獨裝插件,第二種是用第三方框架對文件先做解析,解析出一個html,然后再顯示。
總之這兩種效果都覺得不是很妥當(dāng)。
沒有頭緒的時候,我用qq做了一個測試,把我們的html鏈接發(fā)到我手機qq上 ,然后在qq上點擊html上的附件,發(fā)現(xiàn)是先下載,然后提示用手機上相關(guān)軟件打開,比如 三方瀏覽器(UC瀏覽器,QQ瀏覽器)還有office等。
后來我們也就沒做在線解析直接打開,也是做的像qq一樣先下載然后依賴第三方軟件打開。我覺得也比較合理(1.這種功能沒有必要花那么多時間做的那么復(fù)雜 ?2.遵循主流軟件處理方式)。
webview下載文件的代碼:
package com.baobao.webview;
import com.cx.httpwebview.R;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.Window;
import android.webkit.DownloadListener;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView textView;
private WebView webView;
/** mUrl測試連接url 這個可以換成自己的html路徑 ,
* 自己服務(wù)器上html上面可以放pdf附件或者doc附件 圖片附件。
* 如果是文檔文件 ,就是調(diào)用系統(tǒng)瀏覽器下載,如果安裝了多個瀏覽器,會彈出選擇界面;如果是圖片就是直接打開效果*/
private String mUrl = "http://shouji.baidu.com";
@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView1);
webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onReceivedTitle(WebView view, String title) {
textView.setText(title);
super.onReceivedTitle(view, title);
}
});
webView.setDownloadListener(new MyDownloadStart());
webView.loadUrl(mUrl);
}
class MyDownloadStart implements DownloadListener{
@Override
public void onDownloadStart(String url, String userAgent,
String contentDisposition, String mimetype, long contentLength) {
//調(diào)用自己的下載方式
// new HttpThread(url).start();
//調(diào)用系統(tǒng)瀏覽器下載
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
}
}
核心就上面這幾行代碼,最后附上demo文件。習(xí)慣寫博客給個小demo ,即使是很簡單的功能,感覺比較直觀。
DEMO源碼下載
大家如果還有其它問題,也可以加入我們的qq群:454430053
Android WebView
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。