How to add Video(Part-1) in FirebaseRecyclerAdapter from Galllary..


Step:-1

First add below permission in menifest.xml


Add below code AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.firstproject">

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />

<application
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.firstproject">
//Below activity name differ , as you type activity name during creating
//Below activity code is automatic generated
<activity android:name=".video_Player"/>
<activity android:name=".videos" />
<activity android:name=".dashboardactivity" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>


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

Type below code in Application in Menifest.xml

android:hardwareAccelerated="true"



                                                                       
                                                                            ↓

             Add dependency in app level Gradle 

plugins {
id 'com.android.application'
id 'com.google.gms.google-services'
}

android {
compileSdkVersion 30
buildToolsVersion "30.0.3"

defaultConfig {
applicationId "com.example.phoneauthentication"
minSdkVersion 19
targetSdkVersion 30
versionCode 1
versionName "1.0"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

dependencies {

implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
testImplementation 'junit:junit:'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation platform('com.google.firebase:firebase-bom:26.1.0')

implementation 'com.karumi:dexter:6.2.2'
implementation 'com.google.firebase:firebase-storage:20.0.0'
implementation 'com.google.firebase:firebase-messaging:22.0.0'
implementation 'com.firebaseui:firebase-ui-database:6.2.1'


}

                                                   add below code in string.xml

  <resources>
    <string name="add_song">add song</string>
<string name="enter_video_name">Enter video name</string>
<string name="browse_video">Browse video</string>
<string name="upload_video">Upload video</string>
</resources>
                                        

    Step:-2

Click on res

                                                                              
                                                                               ↓

                                             Right-click on res then click Android resource file


                                                                        
                                                                            ↓

          Type menu name in the File name and select menu in Resource type and click ok

                                                                         

                                                                       ↓

                                                Then add  below code to the menu


<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/add_videos"
android:icon="@drawable/ic_baseline_add_circle_outline_24"
android:title="@string/add_song"
app:showAsAction="always"
/>

</menu>

Step:-3

Right click on drawable and click on Vector assest

                            

Click on Clip art and search add and select then click
click next and finish

                                

Step :-4

Add below code in addvideo.xml

Note:- You can replace addvideo with dashboardactivity

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context=".addvideo
">
<VideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="346dp" />

<EditText
android:layout_width="match_parent"
android:layout_below="@id/videoView"
android:maxLines="2"
android:hint="@string/enter_video_name"
android:labelFor="@id/videoView"
android:id="@+id/vsongname"
android:layout_height="40dp"
android:autofillHints="My video"
android:inputType="textLongMessage" />

<androidx.appcompat.widget.AppCompatButton
android:id="@+id/browse_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/videoView"
android:layout_alignParentStart="true"
android:layout_marginTop="101dp"
android:background="@color/black"
android:gravity="center"
android:text="@string/browse_video"
android:textColor="@color/white"
android:textSize="20sp" />

<Button
android:id="@+id/upload_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/browse_button"
android:layout_alignParentStart="true"
android:layout_alignParentEnd="true"
android:layout_centerHorizontal="true"
android:layout_marginStart="0dp"
android:layout_marginTop="15dp"
android:layout_marginEnd="-3dp"
android:background="@color/black"
android:gravity="center"
android:text="@string/upload_video"
android:textColor="@color/white"
android:textSize="20sp" />
</RelativeLayout>

Step:-5

Add below code in addvideo.java

Note:- You can type projectname replace phoneauthentication during creating project

package com.example.projectname;

import android.Manifest;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.database.Cursor;
import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.text.TextUtils;
import android.webkit.MimeTypeMap;
import android.widget.Button;
import android.widget.EditText;
import android.widget.MediaController;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.VideoView;

import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.iid.FirebaseInstanceIdReceiver;
import com.google.firebase.messaging.FirebaseMessaging;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.karumi.dexter.Dexter;
import com.karumi.dexter.PermissionToken;
import com.karumi.dexter.listener.PermissionDeniedResponse;
import com.karumi.dexter.listener.PermissionGrantedResponse;
import com.karumi.dexter.listener.PermissionRequest;
import com.karumi.dexter.listener.single.PermissionListener;
import com.squareup.okhttp.OkHttpClient;

import java.io.File;
import java.net.URISyntaxException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;



public class addvideo extends AppCompatActivity {
VideoView videoView;
Button browse, upload;
Uri videourl;
int second;
TextView msize;
String FCM_MESSAGE_URL;
EditText vsongname,msongtype;
MediaController mediaController;
boolean checkedpermission = true;
StorageReference storageReference;
DatabaseReference databaseReference;
//ActivityResultLauncher userd for pick video ,image etc 
ActivityResultLauncher<String> mGetContent = registerForActivityResult(new ActivityResultContracts.GetContent(), new ActivityResultCallback<Uri>() {
@RequiresApi(api = Build.VERSION_CODES.Q)
@Override
public void onActivityResult(Uri result) {
videourl = result.normalizeScheme();
Cursor cursor = getApplicationContext().getContentResolver()
.query(videourl, null, null, null, null);
videoView.setVideoURI(videourl );

cursor.moveToFirst();

cursor.close();
}
});


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_addvideo);
videoView = findViewById(R.id.videoView);
browse = findViewById(R.id.browse_button);
upload = findViewById(R.id.upload_button);
vsongname=findViewById(R.id.vsongname);
storageReference= FirebaseStorage.getInstance().getReference();
databaseReference=FirebaseDatabase.getInstance().getReference("Videos");
mediaController = new MediaController(this);
videoView.setMediaController(mediaController);
videoView.start();

browse.setOnClickListener(v -> Dexter.withContext(getApplicationContext()).withPermission(Manifest.permission.READ_EXTERNAL_STORAGE).withListener(new PermissionListener() {
@Override
public void onPermissionGranted(PermissionGrantedResponse permissionGrantedResponse) {
checkedpermission = false;
mGetContent.launch("video/*");


}


@Override
public void onPermissionDenied(PermissionDeniedResponse permissionDeniedResponse) {
checkedpermission = false;
}

@Override
public void onPermissionRationaleShouldBeShown(PermissionRequest permissionRequest, PermissionToken permissionToken) {
permissionToken.continuePermissionRequest();
}
}).check());
upload.setOnClickListener(v -> {
if(TextUtils.isEmpty(vsongname.getText().toString().toLowerCase())) {
Toast.makeText(getApplicationContext(), "Please enter your video name", Toast.LENGTH_LONG).show();
}
else if (videourl==null){
Toast.makeText(getApplicationContext(), "Please browse video", Toast.LENGTH_LONG).show();
}


else{

processvideouploading();

}
});
}
public String getExtention(){
MimeTypeMap mimeTypeMap=MimeTypeMap.getSingleton();
return mimeTypeMap.getExtensionFromMimeType(getContentResolver().getType(videourl));
}


public void processvideouploading() {

ProgressDialog pd=new ProgressDialog(this);
pd.setTitle("Video Uploader");
pd.setMessage("Please wait,while your video is uploading");
pd.show();
StorageReference uploader=storageReference.child("Videos/"+System.currentTimeMillis()+"."+getExtention());
uploader.putFile(videourl)
.addOnSuccessListener(taskSnapshot -> uploader.getDownloadUrl().addOnSuccessListener((Uri uri) -> {
// How to create a new java class in android studio
                    songs obj = new songs(vsongname.getText().toString(), uri.toString().toLowerCase());
databaseReference.child(Objects.requireNonNull(databaseReference.push().getKey())).setValue(obj)
.addOnSuccessListener(Void -> {
pd.dismiss();
Toast.
makeText(getApplicationContext(), "Sucessfully uploaded", Toast.LENGTH_LONG).show();
}).addOnFailureListener(e -> {
pd.dismiss();
Toast.
makeText(getApplicationContext(), "Failed to upload,please try again", Toast.LENGTH_LONG).show();

});
})).addOnProgressListener(snapshot -> {
double progress = (100.0 * snapshot.getBytesTransferred()) / snapshot.getTotalByteCount();
int currentprogress=(int)progress;
pd.setMessage("Uploaded "+currentprogress+"%"
+" Please wait,while your video is uploading.............");
// pd.setMessage("Please wait,while your video is uploading");
pd.setCanceledOnTouchOutside(false);

});
}


}

Step:-6

Create a class songs.java

Right click on project name then click java class


Type songs ,press enter

Add below code in songs.java



package com.example.projectname;

public class songs {
String videoname,videourl,sotype;
public songs(String videoname, String videourl) {
this.videoname = videoname;
this.videourl = videourl;

}


public String getVideoname() {
return videoname;
}


public String getVideourl() {
return videourl;
}


songs(){}

}

                                            

Comments

Popular posts from this blog

How to authenticate mobile number in android studio

How to connect android project to Firebase

How to create a new activity in existing android project in android studio

How to Create a Custom menu in android studio

How to create android project in android studio

How to add(Part-2) Video in FirebaseRecyclerAdapter in android studio

How to download google-services.json file from firebase

How to Add Like,Dislike button in video in android studio

How to create Layout Resource File in existing project in android studio