欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android編程使用WebView實(shí)現(xiàn)文件下載功能的兩種方法

 更新時(shí)間:2018年02月13日 09:58:20   作者:遲做總比不做強(qiáng)  
這篇文章主要介紹了Android編程使用WebView實(shí)現(xiàn)文件下載功能的兩種方法,涉及Android基于WebView的相關(guān)文件傳輸與線程操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Android編程使用WebView實(shí)現(xiàn)文件下載功能的兩種方法。分享給大家供大家參考,具體如下:

在應(yīng)用中,通常會(huì)使用到文件下載功能,一般我們都是寫一個(gè)下載操作工具類,在異步任務(wù)中執(zhí)行下載功能。

今天我們來看下如何使用WebView的文件下載功能!

方法1,自定義下載操作

1. 先來布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:ldm="http://schemas.android.com/apk/res/com.ldm.learn"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<WebView
android:id="@+id/test_wv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="15dp" />
</RelativeLayout>

2. 實(shí)現(xiàn)自定義下載工具操作異步線程類:

public class DownLoadThread extends Thread {
private String downLoadUrl;
private Context context;
private FileOutputStream out = null;
private File downLoadFile = null;
private File sdCardFile = null;
private InputStream in = null;
public DownLoadThread(String downLoadUrl, Context context) {
super();
this.downLoadUrl = downLoadUrl;
this.context = context;
}
@Override
public void run() {
try {
URL httpUrl = new URL(downLoadUrl);
HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection();
 conn.setDoInput(true);// 如果打算使用 URL 連接進(jìn)行輸入,則將 DoInput 標(biāo)志設(shè)置為 true;如果不打算使用,則設(shè)置為 false。默認(rèn)值為 true。
conn.setDoOutput(true);// 如果打算使用
 URL 連接進(jìn)行輸出,則將 DoOutput 標(biāo)志設(shè)置為 true;如果不打算使用,則設(shè)置為 false。默認(rèn)值為 false。
in = conn.getInputStream();
if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
 Toast.makeText(context, "SD卡不可用!", Toast.LENGTH_SHORT).show();
return;
}
downLoadFile = Environment.getExternalStorageDirectory();
sdCardFile = new File(downLoadFile, "download.apk");
out = new FileOutputStream(sdCardFile);
byte[] b = new byte[1024];
int len;
while ((len = in.read(b)) != -1) {
out.write(b, 0, len);
}
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
}
catch (Exception e) {
e.printStackTrace();
}
 }
}

3. 文件下載

public class MainActivity extends Activity {
private WebView test_wv;
private String downLoadUrl = "http://as.baidu.com/a/rank?cid=101&s=1&f=web_alad";
 @Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.test_wv
 = (WebView) findViewById(R.id.test_wv);
test_wv.loadUrl(downLoadUrl);
test_wv.setWebViewClient(new WebViewClient()
 {
@Override
public boolean shouldOverrideUrlLoading(WebView
 view, String url) {
view.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
}
});
//要實(shí)現(xiàn)WebView文件下載,實(shí)現(xiàn)這個(gè)監(jiān)聽就ok
test_wv.setDownloadListener(new
 DownloadListener() {
@Override
public void onDownloadStart(String
 url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
Log.v("ldm", url);
if (url.endsWith(".apk")) {//判斷是否是.apk結(jié)尾的文件路徑
new DownLoadThread(url, MainActivity.this).start();
}
}
});
}
}

方法2:通過系統(tǒng)自身下載方式下載(會(huì)在通知欄顯示下載進(jìn)度條)

只需要把這個(gè)方法改寫如下:

test_wv.setDownloadListener(new
 DownloadListener() {
@Override
public
 void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
Log.v("ldm",
 url);
Uri
 uri=Uri.parse(url);
Intent
 intent=new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
});

更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android文件操作技巧匯總》、《Android視圖View技巧總結(jié)》、《Android編程之a(chǎn)ctivity操作技巧總結(jié)》、《Android布局layout技巧總結(jié)》、《Android開發(fā)入門與進(jìn)階教程》、《Android資源操作技巧匯總》及《Android控件用法總結(jié)

希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Android判斷網(wǎng)絡(luò)類型的方法(2g,3g還是wifi)

    Android判斷網(wǎng)絡(luò)類型的方法(2g,3g還是wifi)

    這篇文章主要介紹了Android判斷網(wǎng)絡(luò)類型的方法,可實(shí)現(xiàn)判斷2g,3g還是wifi的功能,結(jié)合實(shí)例形式分析了Android針對(duì)網(wǎng)絡(luò)類型的相關(guān)判定技巧,需要的朋友可以參考下
    2016-02-02
  • RxJava構(gòu)建流基本原理示例解析

    RxJava構(gòu)建流基本原理示例解析

    這篇文章主要為大家介紹了RxJava構(gòu)建流基本原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Android開發(fā)懸浮窗踩坑解決

    Android開發(fā)懸浮窗踩坑解決

    這篇文章主要為大家介紹了Android懸浮窗踩坑解決示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Android同時(shí)安裝Release和Debug版本的方法

    Android同時(shí)安裝Release和Debug版本的方法

    這篇文章主要介紹了Android同時(shí)安裝Release和Debug版本的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • 詳解Flutter中的數(shù)據(jù)傳遞

    詳解Flutter中的數(shù)據(jù)傳遞

    這篇文章主要介紹了Flutter中的數(shù)據(jù)傳遞的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Flutter,感興趣的朋友可以了解下
    2021-04-04
  • android開發(fā)之歡迎界面的小例子

    android開發(fā)之歡迎界面的小例子

    android開發(fā)之歡迎界面的小例子,需要的朋友可以參考一下
    2013-06-06
  • android實(shí)現(xiàn)背景音樂播放功能

    android實(shí)現(xiàn)背景音樂播放功能

    這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)背景音樂播放功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Android Scroller的使用方法

    Android Scroller的使用方法

    這篇文章主要為大家詳細(xì)介紹了Android Scroller的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Android仿IOS UIAlertView對(duì)話框

    Android仿IOS UIAlertView對(duì)話框

    這篇文章主要為大家詳細(xì)介紹了Android仿IOS UIAlertView對(duì)話框,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Android仿String的對(duì)象駐留示例分析

    Android仿String的對(duì)象駐留示例分析

    這篇文章主要介紹了Android仿String的對(duì)象駐留,較為詳細(xì)的分析說明了對(duì)象駐留的概念及Android實(shí)現(xiàn)仿String對(duì)象駐留的相關(guān)技巧,需要的朋友可以參考下
    2015-12-12

最新評(píng)論