Firebase es una plataforma de desarrollo de aplicaciones móviles y web. Proporciona servicios que una aplicación web o una aplicación móvil pueden requerir. Firebase proporciona cargas y descargas seguras de archivos para la aplicación Firebase. Este artículo explica cómo crear una aplicación de Android con la capacidad de seleccionar un video de la galería móvil y cargar el video en Firebase Storage.
Implementación paso a paso
Paso 1: Crear un nuevo proyecto
Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Java como lenguaje de programación. O abra un proyecto existente en el que desee agregar autenticación y agregue firebase a esa aplicación de Android.
Paso 2. Agregue estas dependencias en el archivo build.gradle (Module:app)
implementation 'com.google.firebase:firebase-storage:19.1.0' implementation 'com.google.firebase:firebase-database:20.0.0'
Paso 3: trabajar con el archivo activity_main.xml
Vaya a la aplicación > res > diseño > actividad_principal.xml y agregue el siguiente código a ese archivo. A continuación se muestra el código para el archivo activity_main.xml .
XML
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" tools:context=".MainActivity"> <Button android:id="@+id/uploadv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Upload Video" /> </LinearLayout>
Paso 4: trabajar con el archivo MainActivity.java
Vaya al archivo MainActivity.java y consulte el siguiente código. A continuación se muestra el código del archivo MainActivity.java . Se agregan comentarios dentro del código para comprender el código con más detalle.
Java
import android.app.ProgressDialog; import android.content.ContentResolver; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.webkit.MimeTypeMap; import android.widget.Button; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; import com.google.android.gms.tasks.Task; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.storage.FirebaseStorage; import com.google.firebase.storage.OnProgressListener; import com.google.firebase.storage.StorageReference; import com.google.firebase.storage.UploadTask; import java.util.HashMap; public class MainActivity extends AppCompatActivity { Button uploadv; ProgressDialog progressDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // initialise layout uploadv = findViewById(R.id.uploadv); uploadv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Code for showing progressDialog while uploading progressDialog = new ProgressDialog(MainActivity.this); choosevideo(); } }); } // choose a video from phone storage private void choosevideo() { Intent intent = new Intent(); intent.setType("video/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(intent, 5); } Uri videouri; // startActivityForResult is used to receive the result, which is the selected video. protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 5 && resultCode == RESULT_OK && data != null && data.getData() != null) { videouri = data.getData(); progressDialog.setTitle("Uploading..."); progressDialog.show(); uploadvideo(); } } private String getfiletype(Uri videouri) { ContentResolver r = getContentResolver(); // get the file type ,in this case its mp4 MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton(); return mimeTypeMap.getExtensionFromMimeType(r.getType(videouri)); } private void uploadvideo() { if (videouri != null) { // save the selected video in Firebase storage final StorageReference reference = FirebaseStorage.getInstance().getReference("Files/" + System.currentTimeMillis() + "." + getfiletype(videouri)); reference.putFile(videouri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { @Override public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { Task<Uri> uriTask = taskSnapshot.getStorage().getDownloadUrl(); while (!uriTask.isSuccessful()) ; // get the link of video String downloadUri = uriTask.getResult().toString(); DatabaseReference reference1 = FirebaseDatabase.getInstance().getReference("Video"); HashMap<String, String> map = new HashMap<>(); map.put("videolink", downloadUri); reference1.child("" + System.currentTimeMillis()).setValue(map); // Video uploaded successfully // Dismiss dialog progressDialog.dismiss(); Toast.makeText(MainActivity.this, "Video Uploaded!!", Toast.LENGTH_SHORT).show(); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Error, Image not uploaded progressDialog.dismiss(); Toast.makeText(MainActivity.this, "Failed " + e.getMessage(), Toast.LENGTH_SHORT).show(); } }).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() { // Progress Listener for loading // percentage on the dialog box @Override public void onProgress(UploadTask.TaskSnapshot taskSnapshot) { // show the progress bar double progress = (100.0 * taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount()); progressDialog.setMessage("Uploaded " + (int) progress + "%"); } }); } } }
Producción:
Imagen de almacenamiento de Firebase:
Base de datos en tiempo real: