Firebase Storage
Firebase Storage nos permite alojar ficheros, ya sean audios, videos, etc.
No olvides configurar las reglas también en Firebase Storage:

El primer paso es instanciar la clase FirebaseStorageReference a través la cual realizaremos todas las acciones:
StorageReference mStorageRef = FirebaseStorage.getInstance().getReference();
Subir imagen
public void upload(View v) {
Uri file = Uri.parse("android.resource://" + getPackageName() + "/" + R.drawable.captura);
StorageReference riversRef = mStorageRef.child("images/rivers.jpg");
riversRef.putFile(file)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
// Get a URL to the uploaded content
//Uri downloadUrl = taskSnapshot.getDownloadUrl();
Log.d("prueba", "completada la subida");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
Log.d("prueba", "fallo subida");
}
});
}
En este caso se selecciona una imagen del dispositivo a través de su URI. Teniendo esa referencia, el método putFile() guarda el fichero en Firebase con la ruta y nombre especifiados en StorageReference. En caso de no existir la ruta de destino images/ se creará.
Descargar imagen
Cuando consultemos a Firebase Storage por una imagen nos proporcionará una URI que nos llevará a la imagen seleccionada. Esa URI la podremos utilizar para, por ejemplo, cargar una imagen en un ImageView, aunque para hacerlo debemos de utilizar una librería externa. En este caso se utiliza Picasso:
implementation 'com.squareup.picasso:picasso:2.71828'
Y para descargar:
public void download(View v) throws IOException {
final StorageReference riversRef = mStorageRef.child("images/rivers.jpg");
final File localFile = File.createTempFile("images", "jpg");
riversRef.getFile(localFile)
.addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
// Successfully downloaded data to local file
riversRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
ImageView imageView = findViewById(R.id.imageView);
Log.d("prueba", "onSuccess: uri= "+ uri.toString());
Picasso.get().load(uri.toString()).into(imageView);
}
});
Log.d("prueba", "completada la descarga " );
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle failed download
Log.d("prueba", "fallo descarga");
}
});
}