Android中下载的.apk文件已损坏

Android中下载的.apk文件已损坏,android,download,corrupt-data,Android,Download,Corrupt Data,我需要通过程序下载一个.apk文件,然后启动它的活动。 我使用的代码如下 private String downloadFile(String sourceURL, String destinationPath) { try { URL url = new URL(sourceURL); URLConnection connection = url.openConnection(); connecti

我需要通过程序下载一个.apk文件,然后启动它的活动。 我使用的代码如下

private String downloadFile(String sourceURL, String destinationPath)
    {
        try {
            URL url = new URL(sourceURL);
            URLConnection connection = url.openConnection();
            connection.connect();

            // download the file
            InputStream input = new BufferedInputStream(url.openStream());
            OutputStream output = new FileOutputStream(destinationPath);

            byte data[] = new byte[1024];
            int count;
            while ((count = input.read(data)) > 0) {
                output.write(data, 0, count);
            }

            output.flush();
            output.close();
            input.close();
//此处编辑:将文件设置为rw,否则将不安装apk文件 Runtime.getRuntime().exec(“chmod 666”+destinationPath)

我提到,我首先为文本文件调用该方法,然后为apk文件调用该方法。因此,每次我在本地处理文件时,不知何故我都知道出了什么问题。通过这种方式,我知道文本文件已正确下载。但是.apk文件已损坏。因为我是在本地开发的,可以访问DDMS和localhost(IP:10.0.2.2),所以我可以肯定地说,罪魁祸首就是上面的代码。当我通过DDMS将“下载的”文件人工替换为原始的.apk文件时,接下来的所有处理都正常。此外,当我比较原始文件和下载的.apk文件时,我有一个是的区别。 我做错了什么? 谢谢
PS:搜索,我意识到,虽然这是一个流行的问题,但没有一致的答案。在我的例子中,我认为这纯粹是一个下载方法问题

请参见上面编辑行下的答案。已实现,工作正常,这可能会帮助其他人

服务器是否以二进制形式发送APK?内容类型标题的值是多少?很有趣。您建议将RequestProperty设置为二进制?如果是这样的话,正确的参数是什么(因为它似乎更倾向于应用程序格式)。比如connection.setRequestProperty(“内容类型”,“多部分/表单数据”)?sourceURL的类型是什么?它是HTTP请求吗?你从哪里下载文件?您必须在服务器代码中设置内容类型头。我正在下载一个apk文件。第一个问题是“这是二进制格式吗?”我提醒大家,上面的代码可以很好地用于文本文件。如您所见,我不使用HttpURLConnection,而是使用URLConnection。据我所知,一个或另一个的使用取决于SDK版本,但我在清单中使用的目标是15,最小为8。还在玩选项…“我正在下载apk文件”-从哪里?“上述代码可以很好地工作,因为它是文本文件”-文本文件可以下载为文本编码,但apk文件需要二进制编码。
            message = "OK";
        }
        catch (MalformedURLException e) {
            message = "Malformed URL error: " + e.getMessage();
        }
        catch (ProtocolException e) {
            message = "Protocol exception error: " + e.getMessage();
        }
        catch (FileNotFoundException e) {
            message = "File not found error: " + e.getMessage();
        }
        catch (IOException e)   {
            e.printStackTrace();
            message = "Failed to download the file : " + e.getMessage();
        }
        return message;
    }