Firebase Storage からアプリにダウンロードする

0

前回の Firebase Storage に関する記事の続きです。

今回は、Firebase Storage 上にあるファイルを、アプリにダウンロードしてみます。

公式のドキュメントはコチラです。

アップロードと同じように、ファイル/メモリ/ストリームに対してのダウンロードができます。

以下の例では、アプリの内部ストレージのファイルに対してダウンロードしています。

(実験のため、予め Firebase Storage にファイルを作っておきます。)


StorageReference fileRef = hogeRef.child("test.dat");

final File localFile = new File(getApplicationContext().getFilesDir(), "test.dat");
	
FileDownloadTask downloadTask = fileRef.getFile(localFile);

downloadTask.addOnCompleteListener(new OnCompleteListener<FileDownloadTask.TaskSnapshot>() {
  @Override
  public void onComplete(@NonNull Task<FileDownloadTask.TaskSnapshot> task) {
    if (task.isSuccessful()) {
      Log.d(TAG, "getFile success");
      Log.d(TAG, "getName : " + localFile.getName());
      Log.d(TAG, "getPath : " + localFile.getPath());
      Log.d(TAG, "length : " + localFile.length());
    } else {
      Log.d(TAG, "getFile failure", task.getException());
    }
  }
});

成功した場合、onComplete が呼ばれます。

実際にファイルが作られたかどうかは、Android Studio のファイルエクスプローラなどで確認できます。

サイズが大きいものをダウンロードする場合、ダウンロードの経過状況を表示したいことがあります。


downloadTask.addOnProgressListener(new OnProgressListener<FileDownloadTask.TaskSnapshot>() {
  @Override
  public void onProgress(@NonNull FileDownloadTask.TaskSnapshot task) {
    Log.d(TAG, "onProgress");
    Log.d(TAG, "getBytesTransferred : " + task.getBytesTransferred());
    Log.d(TAG, "getTotalByteCount   : " + task.getTotalByteCount());
  }
});

このようにすると、onProgress が一定時間毎にコールバックされます。

また、ダウンロードの途中で、ユーザーの操作によって、一時停止/再開/キャンセルすることもできます。

そのためには downloadTask に対して、pause()/resume()/cancel() メソッドを呼び出します。

ダウンロードが一時停止された場合、以下のコールバックが発生します。

downloadTask.addOnPausedListener(new OnPausedListener<FileDownloadTask.TaskSnapshot>() {
  @Override
  public void onPaused(@NonNull FileDownloadTask.TaskSnapshot task) {
    Log.d(TAG, "onPaused");
  }
});

キャンセルされた場合は、onComplete が発生します。この場合、task.isSuccessful() は false となります。

0
タイトルとURLをコピーしました