无法在Android手机中下载文件 - Android ..?

时间:2012-02-09 09:19:33

标签: android permissions download

我有文件下载问题,

我可以在模拟器中下载文件,但它无法使用手机。 我已经为互联网定义了权限并写了SD卡

我在服务器上有一个doc文件,如果用户点击下载。它下载文件。此在模拟器中正常工作,但无法在手机中使用。

修改 我的下载文件代码

public void downloadFile(String _url, String fileName) {
        File PATH = Environment
                .getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
        try {
            PATH.mkdirs();
            URL url = new URL(_url); // you can write here any link
            File file = new File(PATH, fileName);

            long startTime = System.currentTimeMillis();
            Log.d("Manager", "download begining");
            Log.d("DownloadManager", "download url:" + url);
            Log.d("DownloadManager", "downloaded file name:" + fileName);
            /* Open a connection to that URL. */
            URLConnection ucon = url.openConnection();

            /*
             * Define InputStreams to read from the URLConnection.
             */
            InputStream is = ucon.getInputStream();
            BufferedInputStream bis = new BufferedInputStream(is);

            /*
             * Read bytes to the Buffer until there is nothing more to read(-1).
             */
            ByteArrayBuffer baf = new ByteArrayBuffer(50);
            int current = 0;
            while ((current = bis.read()) != -1) {
                baf.append((byte) current);
            }

            /* Convert the Bytes read to a String. */
            FileOutputStream fos = new FileOutputStream(file);
            fos.write(baf.toByteArray());
            fos.close();
            Log.d("ImageManager",
                    "download ready in"
                            + ((System.currentTimeMillis() - startTime) / 1000)
                            + " sec");

        } catch (IOException e) {
            Log.d("ImageManager", "Error: " + e);
        }
    }

1 个答案:

答案 0 :(得分:2)

尝试下面给出的片段......

File PATH = Environment
                .getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
        try {
            //set the download URL, a url that points to a file on the internet
            //this is the file to be downloaded
            _url = _url.replace(" ", "%20");
            URL url = new URL(_url);

            //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();

            //create a new file, specifying the path, and the filename
            //which we want to save the file as.
            File file = new File(PATH,fileName);

            //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();
            Log.i("Download", totalSize+"");
            //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);
            }
            //close the output stream when done
            fileOutput.close();
            return true;

    //catch some possible errors...
    } catch (MalformedURLException e) {
            e.printStackTrace();
    } catch (IOException e) {
            e.printStackTrace();
    }

确保您输入了正确的下载路径(网址)