【问题标题】:how to download file with service in the background?如何在后台下载带有服务的文件?
【发布时间】:2012-01-06 19:04:24
【问题描述】:

我正在制作一个可以下载和显示特殊文件的 android 库应用程序。现在我需要编写一个在后台下载文件的服务!有服务样本吗?

我想将文件保存在 SD 中,因为用户可以更新应用并且不会错过下载的文件。

如果您对此有任何建议或意见,请写信给我。

【问题讨论】:

    标签: android


    【解决方案1】:
    try {
        URL url = new URL("url from apk file is to be downloaded");
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setRequestMethod("GET");
        urlConnection.setDoOutput(true);
        urlConnection.connect();
    
        File sdcard = Environment.getExternalStorageDirectory();
        File file = new File(sdcard, "filename.ext");
    
        FileOutputStream fileOutput = new FileOutputStream(file);
        InputStream inputStream = urlConnection.getInputStream();
    
        byte[] buffer = new byte[1024];
        int bufferLength = 0;
    
        while ( (bufferLength = inputStream.read(buffer)) > 0 ) {
            fileOutput.write(buffer, 0, bufferLength);
        }
        fileOutput.close();
    
    } catch (MalformedURLException e) {
            e.printStackTrace();
    } catch (IOException e) {
            e.printStackTrace();
    }
    }
    

    权限:要写入外部存储,您需要添加此权限:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    

    注意:您可以使用上面的代码将文件下载并保存在 SD 卡中。您可以使用AsysnTaskthread 在后台运行此代码。

    【讨论】:

    【解决方案2】:

    这是另一个示例:

    try {
            //set the download URL, a url that points to a file on the internet
            //this is the file to be downloaded
            URL url = new URL("http://somewhere.com/some/webhosted/file");
    
            //create the new connection
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
    
            //set up some things on the connection
            urlConnection.setRequestMethod("GET");
            urlConnection.setDoOutput(true);
    
            //and connect!
            urlConnection.connect();
    
            //set the path where we want to save the file
            //in this case, going to save it on the root directory of the
            //sd card.
            File SDCardRoot = Environment.getExternalStorageDirectory();
            //create a new file, specifying the path, and the filename
            //which we want to save the file as.
            File file = new File(SDCardRoot,"somefile.ext");
    
            //this will be used to write the downloaded data into the file we created
            FileOutputStream fileOutput = new FileOutputStream(file);
    
            //this will be used in reading the data from the internet
            InputStream inputStream = urlConnection.getInputStream();
    
            //this is the total size of the file
            int totalSize = urlConnection.getContentLength();
            //variable to store total downloaded bytes
            int downloadedSize = 0;
    
            //create a buffer...
            byte[] buffer = new byte[1024];
            int bufferLength = 0; //used to store a temporary size of the buffer
    
            //now, read through the input buffer and write the contents to the file
            while ( (bufferLength = inputStream.read(buffer)) > 0 ) {
                    //add the data in the buffer to the file in the file output stream (the file on the sd card
                    fileOutput.write(buffer, 0, bufferLength);
                    //add up the size so we know how much is downloaded
                    downloadedSize += bufferLength;
                    //this is where you would do something to report the prgress, like this maybe
                    updateProgress(downloadedSize, totalSize);
    
            }
            //close the output stream when done
            fileOutput.close();
    
    //catch some possible errors...
    } catch (MalformedURLException e) {
            e.printStackTrace();
    } catch (IOException e) {
            e.printStackTrace();
    }
    

    【讨论】:

    • 谢谢,您的代码也类似于 Vineet Shukla 的示例。但是代码中的 cmets 对我有用。
    • 如何在后台实现这个下载文件?
    • 你可以在扩展 AsyncTask 的类中完成。
    猜你喜欢
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 2018-07-22
    • 2019-06-17
    • 1970-01-01
    相关资源
    最近更新 更多