2017-11-07 9 views
0

WebViewとDoanloadManagerを使用してフォントをダウンロードしようとしています。 Environment.getExternalStorageDirectory() + "/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アンドロイド7に期待された道を返しました。私はアンドロイドスタジオを更新しました。 –

+0

異なるバージョンのApiでは、新しい機能が導入されています.1つのモバイルに複数のユーザーアカウントがあります。ここで、 'getExternalStorageDirectory()'は異なるユーザのために異なるパスを返します。そのため、 'getExternalStorageDirectory()'によって返される値をハードコードすることはできません。ユーザーがsdcardを持っているか、内部ストレージと外部ストレージパスに影響があります。どのような場所がメソッドによって返されるのか、なぜ気にしますか?システムは可能な限り最良の経路を返します。 – Henry

関連する問題