Introduction
Cette section présente les notions relatives au téléchargement de fichiers avec WebView. Lorsque nous utilisons un navigateur classique, comme UC, et que nous cliquons sur un lien téléchargeable, le téléchargement démarre. En tant que composant de type navigateur, WebView prend bien sûr aussi en charge le téléchargement. Nous pouvons écrire notre propre processus de téléchargement, définir où les fichiers téléchargés sont placés et sous quel nom de fichier les enregistrer. Bien sûr, nous pouvons aussi appeler d'autres navigateurs intégrés pour télécharger, comme Chrome, UC, etc. Ci-dessous une démonstration de son utilisation !
1. Appeler d'autres navigateurs pour télécharger des fichiers :
C'est très simple. Il suffit de définir un DownloadListener pour la WebView, puis de redéfinir la méthode onDownloadStart de DownloadListener. À l'intérieur, nous créons un Intent puis nous appelons startActivity sur l'Activity correspondante. C'est tout !
Le code clé est le suivant ::
wView.setDownloadListener(new DownloadListener(){
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition,
String mimetype, long contentLength) {
Log.e("HEHE","开始下载");
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);
}
});
Si plusieurs navigateurs sont installés sur votre téléphone, une boîte de dialogue s'ouvrira pour vous permettre de choisir l'un des navigateurs avec lequel télécharger.
2. Écrire votre propre fil d'exécution pour télécharger des fichiers
Bien sûr, il se peut que vous ne souhaitiez pas placer les fichiers téléchargés dans le chemin par défaut, ou que vous souhaitiez définir vous-même le nom du fichier, etc. Vous pouvez écrire vous-même un fil d'exécution pour télécharger les fichiers. Le code d'implémentation d'exemple est le suivant :
Code principal:
Nous écrivons séparément une classe de fil d'exécution pour le téléchargement :
DownLoadThread.java
/**
* Created by Jay on 2015/9/14 0014.
*/
public class DownLoadThread implements Runnable {
private String dlUrl;
public DownLoadThread(String dlUrl) {
this.dlUrl = dlUrl;
}
@Override
public void run() {
Log.e("HEHE", "开始下载~~~~~");
InputStream in = null;
FileOutputStream fout = null;
try {
URL httpUrl = new URL(dlUrl);
HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
in = conn.getInputStream();
File downloadFile, sdFile;
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
Log.e("HEHE","SD卡可写");
downloadFile = Environment.getExternalStorageDirectory();
sdFile = new File(downloadFile, "csdn_client.apk");
fout = new FileOutputStream(sdFile);
}else{
Log.e("HEHE","SD卡不存在或者不可读写");
}
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) != -1) {
fout.write(buffer, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fout != null) {
try {
fout.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Log.e("HEHE", "下载完毕~~~~");
}
}
Ensuite, dansMainActivity.java, créez et démarrez le fil d'exécution :
wView.setDownloadListener(new DownloadListener(){
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition,
String mimetype, long contentLength) {
Log.e("HEHE","onDownloadStart被调用:下载链接:" + url);
new Thread(new DownLoadThread(url)).start();
}
});
Résultat de l'exécution:

Lorsque nous ouvrons la carte SD, nous pouvons voir que les fichiers téléchargés reposent déjà tranquillement dans la carte SD :

Notes:
D'accord, de plus, n'oubliez pas d'ajouter l'autorisation de lecture/écriture de la carte SD et l'autorisation d'accès Internet :
<uses-permission android:name="android.permission.INTERNET"/> <!-- 在SDCard中创建与删除文件权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!-- 往SDCard写入数据权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
De plus,in = conn.getInputStream(); doit être placé une fois tous les réglages de conn terminés !! Rappelez-vous, sinon vous ne pourrez rien lire !
Résumé :
Cette section est très simple, donc le code ne sera pas publié. En fait, ce n'est que le truc setDownloadListener ; nous redéfinissons la méthode onDownloadStart pour gérer le processus de téléchargement. C'est tout pour cette section. Merci~