When I click a download button my app will be crashed, I have no idea why app is crashed.Screen Is Complete load and everything is work fine but when I paste YouTube video link and hit the download button app is crashing.I also Doubt when add dependency in build. gradles file is something will be wrong but I didn't get where I do the mistake.
package com.codeseasy.youtubedownloader; import android.Manifest; import android.annotation.SuppressLint; import android.app.DownloadManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Environment; import androidx.annotation.NonNull; import androidx.core.app.ActivityCompat; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import androidx.appcompat.app.AppCompatDelegate; import android.util.Log; import android.util.SparseArray; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import com.google.android.gms.auth.api.signin.GoogleSignIn; import com.google.android.gms.auth.api.signin.GoogleSignInAccount; import com.google.android.gms.auth.api.signin.GoogleSignInClient; import com.google.android.gms.auth.api.signin.GoogleSignInOptions; import com.google.android.gms.common.SignInButton; import com.google.android.gms.common.api.ApiException; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; import com.google.firebase.auth.GoogleAuthProvider; import at.huber.youtubeExtractor.YouTubeUriExtractor; import at.huber.youtubeExtractor.YtFile; public class MainActivity extends AppCompatActivity { EditText editText; String youTubeURL = null; String WritePermission = Manifest.permission.WRITE_EXTERNAL_STORAGE; String ReadPermission = Manifest.permission.READ_EXTERNAL_STORAGE; private SharedPref sharedpref; @Override protected void onCreate(Bundle savedInstanceState) { AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); sharedpref = new SharedPref(this); if(sharedpref.loadNightModeState()==true) { setTheme(R.style.darktheme); } super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (ActivityCompat.checkSelfPermission(this, WritePermission) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(this, ReadPermission) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{WritePermission, ReadPermission}, 1); } editText = findViewById(R.id.youtubevideourlenter); } // main funcation works here public void openFolder() { startActivity(new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS)); } public void YouTubeVideoDownloadF(int iTag){ if (ActivityCompat.checkSelfPermission(this, WritePermission) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(this, ReadPermission) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{WritePermission, ReadPermission}, 1); } else { YTDownload(iTag); } } public void YTDownload(final int itag) { String VideoURLDownload = youTubeURL; @SuppressLint("StaticFieldLeak") YouTubeUriExtractor youTubeUriExtractor = new YouTubeUriExtractor(this) { @Override public void onUrisAvailable(String videoId, final String videoTitle, SparseArray<YtFile> ytFiles) { if ((ytFiles != null)) { String downloadURL = ytFiles.get(itag).getUrl(); Log.e("Download URL: ", downloadURL); if(itag==18 || itag == 22) { String mp4=".mp4"; DownloadManagingF(downloadURL, videoTitle,mp4); }else if (itag == 251){ String mp3=".mp3"; DownloadManagingF(downloadURL,videoTitle,mp3); } } else Toast.makeText(MainActivity.this, "Error With URL", Toast.LENGTH_LONG).show(); } }; youTubeUriExtractor.execute(VideoURLDownload); } public void DownloadManagingF(String downloadURL, String videoTitle,String extentiondwn){ if (downloadURL != null) { DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); DownloadManager.Request request = new DownloadManager.Request(Uri.parse(downloadURL)); request.setTitle(videoTitle); request.setDestinationInExternalPublicDir("/Download/YouTube-Downloader/", videoTitle + extentiondwn); if (downloadManager != null) { Toast.makeText(getApplicationContext(),"Downloading...",Toast.LENGTH_SHORT).show(); downloadManager.enqueue(request); } BroadcastReceiver onComplete = new BroadcastReceiver() { public void onReceive(Context ctxt, Intent intent) { Toast.makeText(getApplicationContext(),"Download Completed",Toast.LENGTH_SHORT).show(); Uri selectedUri = Uri.parse(Environment.getExternalStorageDirectory() +"/Download/YouTube-Downloader/"); Intent intentop = new Intent(Intent.ACTION_VIEW); intentop.setDataAndType(selectedUri, "resource/folder"); if (intentop.resolveActivityInfo(getPackageManager(), 0) != null) { startActivity(intentop); } else { Toast.makeText(getApplicationContext(),"Saved on: Download/YouTube-Downloader",Toast.LENGTH_LONG).show(); restartApp(); } unregisterReceiver(this); finish(); } }; registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); } } public void viewdownloadsbtn(View view) { openFolder(); } public void ytvdownload(View view) { youTubeURL = editText.getText().toString(); if (youTubeURL.contains("http")) { YouTubeVideoDownloadF(18); } else Toast.makeText(this,"Enter URL First",Toast.LENGTH_LONG).show(); } public void ytvdownloadhd(View view) { youTubeURL = editText.getText().toString(); if(mAuth.getCurrentUser() == null) { if (youTubeURL.contains("http")) YouTubeVideoDownloadF(22); else Toast.makeText(this, "Enter URL First", Toast.LENGTH_LONG).show(); } else { Toast.makeText(this, "Upgrade To Pro", Toast.LENGTH_LONG).show(); } } public void ytvdownloadhdp(View view) { youTubeURL = editText.getText().toString(); if (youTubeURL.contains("http")) { YouTubeVideoDownloadF(140); } else Toast.makeText(this,"Enter URL First",Toast.LENGTH_LONG).show(); } public void ytvdownloadaudio(View view) { youTubeURL = editText.getText().toString(); if (youTubeURL.contains("http")) YouTubeVideoDownloadF(251); else Toast.makeText(this,"Enter URL First",Toast.LENGTH_LONG).show(); } }