Téléchargement du fichier WebView


Introduction à cette section

Cette section vous présente les points de connaissance du téléchargement de fichiers WebView Lorsque nous utilisons des navigateurs ordinaires, tels que UC, Lorsque nous cliquons sur un lien de téléchargement, il sera téléchargé en tant que composant de type navigateur, WebView. Bien entendu, le téléchargement est également pris en charge. Nous pouvons écrire nous-mêmes le processus de téléchargement, définir où placer les fichiers téléchargés et quel nom de fichier utiliser. Enregistrez, bien sûr, vous pouvez également appeler d'autres navigateurs intégrés pour télécharger, tels que Chrome, UC, etc. ! Laissez-moi vous montrer comment l'utiliser !


1. Appelez d'autres navigateurs pour télécharger des fichiers :

C'est très simple, il suffit de définir setDownloadListener pour WebView, puis de réécrire DownloadListener. onDownloadStart, puis écrivez-y une intention, puis démarrez l'activité correspondant à l'activité !

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);
    }
});

S'il y a plusieurs navigateurs sur votre téléphone, une boîte de dialogue s'ouvrira pour vous permettre de choisir l'un des navigateurs. Télécharger~


2. Écrivez votre propre fil de discussion pour télécharger le fichier

Bien sûr, vous ne voudrez peut-être pas mettre le fichier téléchargé dans le chemin par défaut, ou vous souhaiterez peut-être définir vous-même le nom du fichier, etc. Vous pouvez l'écrire vous-même Un fil de discussion pour télécharger des fichiers, l'exemple de code d'implémentation est le suivant :

Code principal  :

Nous écrivons nous-mêmes une autre classe de fil de 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, créez et démarrez le fil de discussion dans MainActivity.java :

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 en cours :

1.png

Quand on ouvre la carte SD, on peut voir que le fichier téléchargé repose déjà tranquillement dans la carte SD :

2.png

Remarques :

D'accord, en plus, n'oubliez pas les autorisations de lecture et d'écriture pour la carte SD et les autorisations d'accès Internet au réseau :

De plus, in = conn.getInputStream(); doit être écrit une fois que conn a tout configuré ! ! N’oubliez pas, sinon vous ne pourrez rien lire !


Résumé de cette section :

Cette section est très simple, le code ne sera pas publié. En fait, il est setDownloadListener, réécrivez-le vous-même. La méthode onDownloadStart est juste utilisée pour gérer le processus de téléchargement~, c'est tout pour cette section, merci~