Android Java.io.FileNotFoundException при попытке загрузить и сохранить видео

Я пытаюсь разработать приложение, которое предоставляет множество фильмов, и вы можете воспроизвести его или скачать фильм.

Это приложение отлично работает в моей рутированной Galaxy S4 (API Kitkat:19), но когда я устанавливаю его на другое устройство и пытаюсь загрузить фильм, оно дает мне исключение Java.io.FileNotFoundExceptionЯ не знаю в чем проблема

Это мой код

package nmc.net.blue.bluenet_nmc;

import android.content.Context;
import android.os.AsyncTask;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.net.URL;
import java.net.URLConnection;

/**
 * Created by ElHoni on 5/3/2016.
 */
public class DownloadFileAsync extends AsyncTask<String, String, String> {



    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... aurl) {
        int count;

        try {
            URL url = new URL(aurl[0]);
            URLConnection conexion = url.openConnection();
            conexion.connect();

            File folder = new File(Environment.getExternalStorageDirectory() +
                    File.separator + "BlueNet");

            if (!folder.exists()) {
                folder.mkdirs();
            }


            String outputPath=folder.getPath()+"/"+aurl[1];

            BufferedInputStream input = new BufferedInputStream(url.openStream());
            FileOutputStream output = new FileOutputStream(outputPath);

            byte data[] = new byte[1024];

            long total = 0;

            while ((count = input.read(data, 0, 1024)) != -1) {
                output.write(data, 0, count);

            }

            output.flush();
            output.close();
            input.close();
        } catch (Exception e) {
            String err = e.toString();

        }
        return null;

    }
    protected void onProgressUpdate(String... progress) {
        Log.d("ANDRO_ASYNC",progress[0]);
    }

    @Override
    protected void onPostExecute(String unused) {

        //Toast.makeText(full_screen_video.this, "", 5);

    }

}

и, кстати, я положил это разрешение в manufests

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

любая помощь, пожалуйста

1 ответ

Решение

Как я уже сказал, вы должны использовать DownloadManager за то, что вы хотите.

Вот метод, который загружает файл с данного URL.

public static void downloadFileFromUrl(String url, String dir, String fileName, DownloadManager downloadManager) {
    Uri downloadUri = Uri.parse(url);
    DownloadManager.Request request = new DownloadManager.Request(downloadUri);

    request.setDestinationInExternalPublicDir(dir, fileName);
    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
    request.setVisibleInDownloadsUi(true);
    downloadManager.enqueue(request);
}

иллюстрировать примерами DownloadManager как это:

DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);

Не забудьте добавить WRITE_PERMISSION а также INTERNET_PERMISSION и не забывайте, что в Android M или новее вы должны проверить разрешения по-другому.

Другие вопросы по тегам