2017-11-07 1 views
0

WebView 및 DoanloadManager를 사용하여 글꼴을 다운로드하려고합니다. Environment.getExternalStorageDirectory() + "/Fonts/"을 사용하여 다운로드 폴더 디렉토리를 "Fonts"폴더로 설정했지만 대신 다른 원치 않는 디렉토리 인 sdcard/storage/emulated/0/Fonts/을 만듭니다. 내 코드에 어떤 문제가 있습니까? 여기에 전체 코드 조각은 다음과 같습니다Environment.getExternalStorageDirectory가 잘못된 경로를 반환하는 이유는 무엇입니까?

@Override 
     public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimeType, long contentLength) { 
      String filename = URLUtil.guessFileName(url, contentDisposition, mimeType); 
      DownloadManager.Request request = new DownloadManager.Request(
        Uri.parse(url)); 
      request.setMimeType(mimeType); 
      String cookies = CookieManager.getInstance().getCookie(url); 
      request.addRequestHeader("cookie", cookies); 
      request.addRequestHeader("User-Agent", userAgent); 
      request.setDescription("Downloading file..."); 
      request.setTitle(filename); 
      request.allowScanningByMediaScanner(); 
      request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 
      request.setDestinationInExternalPublicDir(Environment.getExternalStorageDirectory() + "/Fonts/", filename); 
      DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); 
      dm.enqueue(request); 
+0

실제 장치 대신 에뮬레이터에서 코드를 실행하고 있습니까? –

답변

0

sdcard/storage/emulated/0/ 것은 당신이 에뮬레이터를 사용하는 경우 일반적으로 Environment.getExternalStorageDirectory()에 의해 반환되는 경로입니다.

Environment.getExternalStorageDirectory()은 폴더를 반환 할 수 있으며 실제로 경로를 예측할 수 없습니다. 오늘 우리는 같은 장치에 여러 개의 프로필이 있습니다. 또한, 이것은 안드로이드 API 버전에 따라 변경 될 수 있습니다.

+0

API 버전이란 무엇입니까? 그것은 내 은하 s7 android 7.에 항상 예상되는 경로를 반환했습니다. 나는 android studio를 업데이트했습니다. –

+0

다양한 API 버전으로 새로운 기능이 도입되었습니다. 하나의 모바일에 여러 사용자 계정이 있습니다. 여기서'getExternalStorageDirectory()'는 다른 사용자에게 다른 경로를 반환합니다. 이것이'getExternalStorageDirectory()'에 의해 리턴 된 값을 절대로 하드 코딩 할 수없는 이유입니다. 사용자가 sdcard를 가지고 있거나 내부 저장소 및 외부 저장소 경로가 이로 인해 영향을받습니다. 왜이 메소드가 어떤 위치를 반환하는지 신경 씁니까? 시스템이 최상의 경로를 반환합니다. – Henry

관련 문제