class LongOperation extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
try {
String url2 = "https://www.w3schools.com/w3css/img_fjords.jpg";
String url = url2.replaceAll(" ", "%20");
String fileName = URLUtil.guessFileName(url, null, MimeTypeMap.getFileExtensionFromUrl(url));
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.setMimeType(MimeTypeMap.getFileExtensionFromUrl(url));
String cookies = CookieManager.getInstance().getCookie(url);
//request.addRequestHeader("Cookie", cookies);
//request.addRequestHeader("User-Agent", userAgent);
request.setDescription("Downloading File");
//request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);
request.setTitle("test.png");
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName);
DownloadManager downloadManager = (DownloadManager) module.getActivity().getSystemService(DOWNLOAD_SERVICE);
if (downloadManager != null) {
final long downloadID = downloadManager.enqueue(request);
System.out.println(downloadID);
}
Toast.makeText(module.getActivity(), "Downloading File", Toast.LENGTH_LONG).show();
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
return "Executed";
}
@Override
protected void onPostExecute(String result) {
Log.d("Post Execute","Post Execute");
// might want to change "executed" for the returned string passed
// into onPostExecute() but that is upto you
}
@Override
protected void onPreExecute() {}
@Override
protected void onProgressUpdate(Void... values) {}
}
new LongOperation().execute("");
위의 코드를 사용하여 내 기본 애플리케이션에 원시 안드로이드 코드를 사용하여 이미지를 다운로드하고 있습니다. 이 메소드가 실행될 때 다운로드 상태는 STATUS_PAUSED -> PAUSED_WAITING_TO_RETRY 상태가되고 언젠가는 ERROR_HTTP_DATA_ERROR 오류 코드와 함께 실패합니다. 내 안드로이드 매니페스트에서 아래의 권한을 부여했으며 런타임에는 저장소 권한도 요청합니다.HTTP_DATA_ERROR로 다시 시도하고 실패한 Android 다운로드 관리자
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
내가 뭘 잘못하고 있니? 어딘가에 활동/service.The 파일의 비동기 작업의 외부 코드가/sdcard0/안드로이드/데이터/your_package_name/폴더에 다운로드됩니다
한편 읽어 [이 스레드 (https://stackoverflow.com/questions/34782965/downloadmanager-understanding-error-http-data-error). – ADM
고마워, 나는 그것을 통해 가서 (Y) –
확인이 코드를 비동기 작업에서 실행해야합니까? – udit7395