android - 如何从网址下载视频?

标签 android video download

我正在尝试从 URL 下载视频文件。 以下是我的代码。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ProgressBack PB = new ProgressBack();
        PB.execute("");
    }

    private class ProgressBack extends AsyncTask<String, String, String> {
        ProgressDialog PD;

        @Override
        protected void onPreExecute() {
            PD = ProgressDialog.show(MainActivity.this, null, "Please Wait ...", true);
            PD.setCancelable(true);
        }

        @Override
        protected String doInBackground(String... arg0) {
            downloadFile("https://r8---sn-nhpax-ua8z.googlevideo.com/videoplayback?c=web&clen=17641691&cpn=Mf_hDzzzBYPH8N_J&cver=as3&dur=189.857&expire=1425270280&fexp=905657%2C907263%2C912333%2C926419%2C927622%2C931358%2C934947%2C936928%2C9406255%2C9406746%2C9406850%2C943917%2C945093%2C947225%2C947240%2C948124%2C951703%2C952302%2C952605%2C952612%2C952620%2C952901%2C955301%2C957201%2C959701&gcr=il&gir=yes&id=o-AM54E58Im9m8yqaerEsKkGXOx0IWge8YN4h6OhFkcDTe&initcwndbps=1488750&ip=84.228.53.86&ipbits=0&itag=135&keepalive=yes&key=yt5&lmt=1402678222642477&mime=video%2Fmp4&mm=31&ms=au&mt=1425248654&mv=m&pl=20&ratebypass=yes&requiressl=yes&signature=E8027BCB4C1EE76254FC008B0044655E58485D81.931863F3A7AD6C6B01262BCD723B37E5396D4317&source=youtube&sparams=clen%2Cdur%2Cgcr%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Ckeepalive%2Clmt%2Cmime%2Cmm%2Cms%2Cmv%2Cpl%2Crequiressl%2Csource%2Cupn%2Cexpire&sver=3&upn=moGJHdfD4Z8", "Sample.mp4");

            return null;
        }

        protected void onPostExecute(Boolean result) {
            PD.dismiss();

        }

    }


    private void downloadFile(String fileURL, String fileName) {
        try {
            String rootDir = Environment.getExternalStorageDirectory()
                    + File.separator + "Video";
            File rootFile = new File(rootDir);
            rootFile.mkdir();
            URL url = new URL(fileURL);
            HttpURLConnection c = (HttpURLConnection) url.openConnection();
            c.setRequestMethod("GET");
            c.setDoOutput(true);
            c.connect();
            FileOutputStream f = new FileOutputStream(new File(rootFile,
                    fileName));
            InputStream in = c.getInputStream();
            byte[] buffer = new byte[1024];
            int len1 = 0;
            while ((len1 = in.read(buffer)) > 0) {
                f.write(buffer, 0, len1);
            }
            f.close();
        } catch (IOException e) {
            Log.d("Error....", e.toString());
        }
    }
}

但是下载不了。并且显示 java.io.FileNotFoundException。 有没有其他方法可以下载视频文件或我的代码有什么问题。 有人可以帮帮我吗?

最佳答案

    //Check if External Storage permission js allowed
    if (!storageAllowed()) {
        // We don't have permission so prompt the user
        ActivityCompat.requestPermissions(getActivity(), Constant.PERMISSIONS_STORAGE, Constant.REQUEST_EXTERNAL_STORAGE);
        progressDialog.dismiss();
        showToast("Kindly grant the request and try again");
    }else {

        String mBaseFolderPath = android.os.Environment
                .getExternalStorageDirectory()
                + File.separator
                + "FolderName" + File.separator;
        if (!new File(mBaseFolderPath).exists()) {
            new File(mBaseFolderPath).mkdir();
        }

        if (downloadUrl == null || TextUtils.isEmpty(downloadUrl)) {
            showToast("Download url not found!");
            return;
        }

        Uri downloadUri = Uri.parse(url.trim());
        if (downloadUri == null) {
            showToast("Download url not found!");
            return;
        }

        String mFilePath = "file://" + mBaseFolderPath + "/" + fname ;
        DownloadManager.Request req = new DownloadManager.Request(downloadUri);
        req.setDestinationUri(Uri.parse(mFilePath));
        req.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
        DownloadManager dm = (DownloadManager) getActivity().getSystemService(getActivity().DOWNLOAD_SERVICE);
        dm.enqueue(req);
        progressDialog.dismiss();
        loadInterstitialAd();
    }
}

关于android - 如何从网址下载视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41935643/

相关文章:

Android:使用 sharedprefs 进行登录 session 后出现堆栈跟踪错误

android - 没有与此客户端 ID 关联的关联应用

android - 存储 SendBird channel 列表 - Android

android - gmail 在其 list 文件中提供的权限和 Intent 列表是什么

java - 以编程方式从 youtube 和其他音乐网站下载 mp3 Java

video - 混合 2 个视频文件,一个带有 Alpha channel (部分透明)

html - 如何隐藏视频 html 标签的 src?

android - 如何模仿默认浏览器从webview下载.apk文件?

Perl,解析链接下载名称

javascript - 是否可以在超链接中指定下载文件的位置