2016-07-01 6 views
1

ファイルをダウンロードして、ユーザのDownloadsフォルダに保存することを目的としたクラスがあります。正しいアクセス許可が宣言されています。このクラスが呼び出し元のアクティビティに送り返しているブロードキャストに基づいて、ファイルがダウンロード中であることがわかります。しかし、これが完了すると、ファイルはどこにでも保存されているように見えますが、確かにDownloadsフォルダには保存されていません。ダウンロードフォルダにファイルをダウンロードしていません

なぜこのフォルダへのアクセスが得られないのか、それとも正しく保存されないのか分かりますか?ありがとうございました。

public class FileDownloader extends IntentService { 

    public static final String FILENAME = "filename"; 
    public static final String FULLPATH = "fullpath"; 
    public static final String FILESIZE = "filesize"; 
    public static final String RECEIVER = "receiver"; 

    public static String broadcastReceiver; 

    public FileDownloader() { 
     super("DownloadFile"); 
    } 

    protected void onHandleIntent(Intent intent) { 

     String urlPath = intent.getStringExtra(FULLPATH); 
     String filename = intent.getStringExtra(FILENAME); 
     int filesize = intent.getIntExtra(FILESIZE, 1); 
     broadcastReceiver = intent.getStringExtra(RECEIVER); 

     // THIS IS WHERE I AM ATTEMPTING TO CREATE A PATH TO THE DOWNLOADS FOLDER 
     File outputFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), filename); 

     if (outputFile.exists()) { 
      outputFile.delete(); 
     } 

     downloadFile(urlPath, outputFile, filesize); 
    } 

    private void downloadFile(String urlPath, File outputFile, int filesize) { 

     Intent intent = new Intent(broadcastReceiver); 
     URL url; 
     try { 
      url = new URL(urlPath); 
      InputStream is = url.openStream(); 
      OutputStream os = new FileOutputStream(outputFile); 

      byte[] b = new byte[2048]; 
      int length; 
      int bytes_downloaded = 0; 

      while ((length = is.read(b)) != -1) { 
       os.write(b, 0, length); 
       bytes_downloaded += length; 

       final int progress = (int) ((bytes_downloaded * 100l)/filesize); 
       String message = Integer.toString(progress) + "%"; 
       intent.putExtra("message", message); 
       LocalBroadcastManager.getInstance(TexasApp.getContext()).sendBroadcast(intent); 
      } 

      intent.putExtra("message", "done"); 
      LocalBroadcastManager.getInstance(TexasApp.getContext()).sendBroadcast(intent); 

      is.close(); 
      os.close(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

そして、ちょうど場合には、これは私のマニフェストにある:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

最後にひとつの事:私は私が正しくAndroidの6許可をナビゲートしていますことを知っているが、そう、これはに関連していないと仮定してくださいこの問題。

ありがとうございました!

+0

"ファイルはどこにも保存されていないようですが、確かにダウンロードフォルダには保存されていません" - これはどのように判断していますか? – CommonsWare

+0

私は、ダウンロードフォルダとパスの両方で自分のファイルマネージャを見ています: "device storage \ Android \ data \ com.mydomain.myapp"。他のダウンロード方法を使用して、これは以前にファイルが保存されていた場所です。私はそれがどこか他の場所に落ちていないことを保証することはできませんが、もしあれば私は驚くでしょう。 – Alex

+0

また、ダウンロードされたファイルは通知されず、ダウンロード履歴には何も表示されません。 – Alex

答えて

0

ファイルがファイルマネージャ(開発マシンなど)に表示されるようにするには、MediaStoreでインデックスを作成する必要があります。これは最終的に起こりますが、数時間かかる場合があります。より迅速にインデックスを取得するには、MediaScannerConnectionとそのscanFile()メソッドを使用してください。

関連する問題