투케이2K

90. (TWOK/ERROR) [Android] DownloadManager 다운로드 매니저 사용해 파일 다운 시 파일 명칭 문제로 인해 에러 발생 이슈 본문

투케이2K 에러관리

90. (TWOK/ERROR) [Android] DownloadManager 다운로드 매니저 사용해 파일 다운 시 파일 명칭 문제로 인해 에러 발생 이슈

투케이2K 2022. 8. 12. 13:39

[환경 설정 및 설명]

프로그램 : AndroidStudio

설 명 : DownloadManager 다운로드 매니저 사용해 파일 다운 시 파일 명칭 문제로 인해 에러 발생 이슈

 

[에러 원인]

1. 파일 명칭(test.txt)이 깨지 거나, 한글인 경우 인코딩 되지 않거나, 알 수 없는 데이터로 인해 에러가(exception)가 발생 하는 이유

 

[해결 방법]

1. 에러 (exception) 가 발생한 경우는 현재 날짜 및 시간 정보로 파일 명칭 포맷 후 >> 다운로드 수행 실시

 

                            // TODO [DownloadManager 사용해 파일 다운로드 수행 실시]
                            DownloadManager manager = (DownloadManager) mContext.getSystemService(Activity.DOWNLOAD_SERVICE);
                            Uri uri = Uri.parse(url.trim()); // [파일 다운로드 주소 : 확장자명 포함되어야함]
                            DownloadManager.Request request = new DownloadManager.Request(uri); // [다운로드 매니저 객체 생성]
                            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); // [앱 상단에 다운로드 표시]
                            request.setDescription("Download ... "); // [다운로드 중 표시되는 내용]
                            request.setNotificationVisibility(1); // [앱 상단에 다운로드 상태 표시]
                            try {
                                //*
                                request.setTitle(fileName); // [다운로드 제목 표시]
                                request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName); // [다운로드 폴더 지정]
                                manager.enqueue(request); // [다운로드 수행]
                                // */
                                return;
                            }
                            catch (Exception e){
                                //e.printStackTrace();

                                // TODO [파일 명칭 관련 에러가 발생한 경우 >> 현재 날짜 및 시간으로 포맷 수행 실시]
                                try {
                                    // [현재 날짜 및 시간 확인 실시]
                                    long time = System.currentTimeMillis();
                                    SimpleDateFormat dayTime = new SimpleDateFormat("yyyyMMddkkmmss");
                                    String str = dayTime.format(new Date(time));


                                    // [현재 날짜 및 시간 데이터 + 확장자명 결합 실시]
                                    String newFileName = str.trim() + "." + extension.trim();


                                    //*
                                    request.setTitle(newFileName); // [다운로드 제목 표시]
                                    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, newFileName); // [다운로드 폴더 지정]
                                    manager.enqueue(request); // [다운로드 수행]
                                    // */
                                    return;
                                }
                                catch (Exception ex){
                                    ex.printStackTrace();
                                    return;
                                }
                            }

 

반응형
Comments