使用 Android 下载管理器下载文件并保存在应用程序文件夹中

Far*_*ABZ 6 android android-download-manager

如何从我的 Android 应用程序中的 Web 服务器下载一些文件,并将它们存储在根位置的应用程序文件夹中或内部/外部内存中的私人文件夹中。

我可以下载文件,但无法将它们存储在私人文件夹中。

我已经写了我的下载管理器,但在显示通知(如下载百分比)时遇到了一些问题。

Oma*_*lak 3

我不太确定你想用“私人文件夹”做什么......但这就是我使用进度回调下载文件的方式:

public class Downloader extends Thread implements Runnable{
    private String url;
    private String path;
    private DownloaderCallback listener=null;

    public Downloader(String path, String url){
        this.path=path;
        this.url=url;
    }

    public void run(){
        try {
            URL url = new URL(this.url);
            URLConnection urlConnection = url.openConnection();
            urlConnection.connect();

            String filename = urlConnection.getHeaderField("Content-Disposition");
            // your filename should be in this header... adapt the next line for your case
            filename = filename.substring(filename.indexOf("filename")+10, filename.length()-2);

            int total = urlConnection.getContentLength();
            int count;

            InputStream input = new BufferedInputStream(url.openStream());
            OutputStream output = new FileOutputStream(path+"/"+filename);

            byte data[] = new byte[4096];
            long current = 0;

            while ((count = input.read(data)) != -1) {
                current += count;
                if(listener!=null){
                    listener.onProgress((int) ((current*100)/total));
                }
                output.write(data, 0, count);
            }

            output.flush();

            output.close();
            input.close();

            if(listener!=null){
                listener.onFinish();
            }
        } catch (Exception e) {
            if(listener!=null)
                listener.onError(e.getMessage());
        }
    }

    public void setDownloaderCallback(DownloaderCallback listener){
        this.listener=listener;
    }

    public interface DownloaderCallback{
        void onProgress(int progress);
        void onFinish();
        void onError(String message);
    }
}
Run Code Online (Sandbox Code Playgroud)

使用方法:

Downloader dl = new Downloader("/path/to/save/file", "http://server.com/download");
dl.setDownloaderCallback(new DownloaderCallback{
    @Override
    void onProgress(int progress){

    }

    @Override
    void onFinish(){

    }

    @Override
    void onError(String message){

    }
});
dl.start();
Run Code Online (Sandbox Code Playgroud)