Android download video from URL and save to internal storage
Android download video from URL and save to internal storage. Hi Everyone in this Android Tutorial, I am sharing How to download a video in Android from a URL and save it to internal storage. here I am using a string video URL and downloading the video for these URLs. I am using AsyncTask for downloading videos and saving in the phone memory. Creating a folder for saving videos to internal storage
Android download video from URL and save to internal storage
Table of Contents
In android, if you want to learn to download a video from the URL you can just follow these simple steps.
Step 1: Create an android project with an empty Activity.
Start your android studio and create a project in with select an empty activity. and used a button in your XML file and findviewbyid in your main java file, Android download video from URL and save to internal storage.
Step 2: Open You Main.java File and add this code.
public class MainActivity extends AppCompatActivity { private Button downloadButton; String fileN = null ; public static final int MY_PERMISSIONS_REQUEST_WRITE_STORAGE = 123; boolean result; String urlString;Dialog downloadDialog; @SuppressLint({"SetJavaScriptEnabled", "JavascriptInterface"}) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTheme(Constant.theme); setContentView(R.layout.activity_main); result = checkPermission(); if(result){ checkFolder(); } if (!isConnectingToInternet(this)) { Toast.makeText(this, "Please Connect to Internet", Toast.LENGTH_LONG).show(); } downloadButton = (Button)DialogView.findViewById(R.id.downloadButton); downloadButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "Downloading", Toast.LENGTH_SHORT).show(); newDownload(urlString); main_dialog.dismiss(); } }); } public static boolean isConnectingToInternet(Context context) { ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); return activeNetwork != null && activeNetwork.isConnectedOrConnecting(); } // DownloadTask for downloding video from URL public class DownloadTask extends AsyncTask<String, Integer, String> { private Context context; private PowerManager.WakeLock mWakeLock; public DownloadTask(Context context) { this.context = context; } private NumberProgressBar bnp; @Override protected String doInBackground(String... sUrl) { InputStream input = null; OutputStream output = null; HttpURLConnection connection = null; try { java.net.URL url = new URL(sUrl[0]); connection = (HttpURLConnection) url.openConnection(); connection.connect(); if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) { return "Server returned HTTP " + connection.getResponseCode() + " " + connection.getResponseMessage(); } int fileLength = connection.getContentLength(); input = connection.getInputStream(); fileN = "FbDownloader_" + UUID.randomUUID().toString().substring(0, 10) + ".mp4"; File filename = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + Constants.FOLDER_NAME, fileN); output = new FileOutputStream(filename); byte data[] = new byte[4096]; long total = 0; int count; while ((count = input.read(data)) != -1) { if (isCancelled()) { input.close(); return null; } total += count; if (fileLength > 0) publishProgress((int) (total * 100 / fileLength)); output.write(data, 0, count); } } catch (Exception e) { return e.toString(); } finally { try { if (output != null) output.close(); if (input != null) input.close(); } catch (IOException ignored) { } if (connection != null) connection.disconnect(); } return null; } @Override protected void onPreExecute() { super.onPreExecute(); PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, getClass().getName()); mWakeLock.acquire(); LayoutInflater dialogLayout = LayoutInflater.from(MainActivity.this); View DialogView = dialogLayout.inflate(R.layout.progress_dialog, null); downloadDialog = new Dialog(MainActivity.this, R.style.CustomAlertDialog); downloadDialog.setContentView(DialogView); WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); lp.copyFrom(downloadDialog.getWindow().getAttributes()); lp.width = (getResources().getDisplayMetrics().widthPixels); lp.height = (int)(getResources().getDisplayMetrics().heightPixels*0.65); downloadDialog.getWindow().setAttributes(lp); final Button cancel = (Button) DialogView.findViewById(R.id.cancel_btn); cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //stopping the Asynctask cancel(true); downloadDialog.dismiss(); } });. downloadDialog.setCancelable(false); downloadDialog.setCanceledOnTouchOutside(false); bnp = (NumberProgressBar)DialogView.findViewById(R.id.number_progress_bar); bnp.setProgress(0); bnp.setMax(100); downloadDialog.show(); } @Override protected void onProgressUpdate(Integer... progress) { super.onProgressUpdate(progress); bnp.setProgress(progress[0]); } @Override protected void onPostExecute(String result) { mWakeLock.release(); downloadDialog.dismiss(); if (result != null) Toast.makeText(context, "Download error: " + result, Toast.LENGTH_LONG).show(); else Toast.makeText(context, "File downloaded", Toast.LENGTH_SHORT).show(); MediaScannerConnection.scanFile(MainActivity.this, new String[]{Environment.getExternalStorageDirectory().getAbsolutePath() + Constants.FOLDER_NAME + fileN}, null, new MediaScannerConnection.OnScanCompletedListener() { public void onScanCompleted(String newpath, Uri newuri) { Log.i("ExternalStorage", "Scanned " + newpath + ":"); Log.i("ExternalStorage", "-> uri=" + newuri); } }); } } //hare you can start downloding video public void newDownload(String url) { final DownloadTask downloadTask = new DownloadTask(MainActivity.this); downloadTask.execute(url); } @TargetApi(Build.VERSION_CODES.JELLY_BEAN) public boolean checkPermission() { int currentAPIVersion = Build.VERSION.SDK_INT; if (currentAPIVersion >= android.os.Build.VERSION_CODES.M) { if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { AlertDialog.Builder alertBuilder = new AlertDialog.Builder(MainActivity.this); alertBuilder.setCancelable(true); alertBuilder.setTitle("Permission necessary"); alertBuilder.setMessage("Write Storage permission is necessary to Download Images and Videos!!!"); alertBuilder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { @TargetApi(Build.VERSION_CODES.JELLY_BEAN) public void onClick(DialogInterface dialog, int which) { ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_WRITE_STORAGE); } }); AlertDialog alert = alertBuilder.create(); alert.show(); } else { ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_WRITE_STORAGE); } return false; } else { return true; } } else { return true; } } public void checkAgain() { if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { AlertDialog.Builder alertBuilder = new AlertDialog.Builder(MainActivity.this); alertBuilder.setCancelable(true); alertBuilder.setTitle("Permission necessary"); alertBuilder.setMessage("Write Storage permission is necessary to Download Images and Videos!!!"); alertBuilder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { @TargetApi(Build.VERSION_CODES.JELLY_BEAN) public void onClick(DialogInterface dialog, int which) { ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_WRITE_STORAGE); } }); AlertDialog alert = alertBuilder.create(); alert.show(); } else { ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_WRITE_STORAGE); } } //Here you can check App Permission @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_WRITE_STORAGE: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { checkFolder(); } else { //code for deny checkAgain(); } break; } } //hare you can check folfer whare you want to store download Video public void checkFolder() { String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/FBDownloader/"; File dir = new File(path); boolean isDirectoryCreated = dir.exists(); if (!isDirectoryCreated) { isDirectoryCreated = dir.mkdir(); } if (isDirectoryCreated) { // do something\ Log.d("Folder", "Already Created"); } }
How to Create A Video streaming app in android studio
Read More Tutorial