URL에서 파일을 다운로드하려고 할 때 android 4.0 이상에서 문제가 발생합니다. android Galaxy Y 2.3/2.2에서는 잘 작동하지만 사용하면 Galaxy S3 (4.1.2)와 동일한 코드가 다운로드가 시작되지만 끝나지 않습니다.android 4.0/4.1.2에서 다운로드 할 때
코드 :
public void update() {
Log.d(TAG, "Método para fazer a atualização iniciado.");
try {
Log.d(TAG, "Conectando com a internet...");
URL url = new URL(
url);
HttpURLConnection c = (HttpURLConnection) url.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
Log.d(TAG, "Iniciando arquivo...");
String PATH = Environment.getExternalStorageDirectory()
+ "/test/Update/";
File file = new File(PATH);
file.mkdirs();
File outputFile = new File(file, "test.apk");
FileOutputStream fos = new FileOutputStream(outputFile);
Log.d(TAG, "Iniciando Stream...");
InputStream is = c.getInputStream();
Log.d(TAG, "Iniciando o download...");
byte[] buffer = new byte[1024];
int len1 = 0;
while ((len1 = is.read(buffer)) != -1) {
fos.write(buffer, 0, len1);
}
fos.close();
is.close();
Log.d(TAG, "Iniciando instalador...");
final Intent promptInstall = new Intent(Intent.ACTION_VIEW);
promptInstall.setDataAndType(Uri.fromFile(new File(PATH + "test.apk")),"application/vnd.android.package-archive");
promptInstall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(promptInstall);
Log.d(TAG, "Instalador iniciado com sucesso!");
} catch (MalformedURLException e) {
Log.e(TAG, "Malformed URL. Mensagem: " + e.getMessage()
+ " Causa: " + e.getCause());
} catch (IOException e) {
Log.e(TAG, "IOException. Mensagem: " + e.getMessage() + " Causa: "
+ e.getCause());
} catch (Exception e) {
Log.e(TAG, "Exception. Mensagem: " + e.getMessage() + " Causa: "
+ e.getCause());
}
}
것을 제외 : 오류가 없다, 그냥 다운로드를 시작하고 중지합니다. 파일 크기 : 126,188 바이트 및 갤럭시 S3 6,403 바이트
AsyncTask를 사용하십시오. –
문서에서; _HttpURLConnection은 기본적으로 GET 메서드를 사용합니다. setDoOutput (true)가 호출되면 POST가 사용됩니다 ._ 아무것도 게시하지 않으므로''c.setDoOutput (true)''줄을 제거하고 스트림을 닫을 때 문제가 해결되었는지 확인할 수 있습니다. – harism