Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在恢复Internet或重新创建活动时恢复下载_Java_Android_Download_Android Asynctask - Fatal编程技术网

Java 如何在恢复Internet或重新创建活动时恢复下载

Java 如何在恢复Internet或重新创建活动时恢复下载,java,android,download,android-asynctask,Java,Android,Download,Android Asynctask,我正在使用AsyncTask使用下面的代码从URL链接下载视频 public static class DownloadTask extends AsyncTask<String, Void, String> { WeakReference<MainActivity>weakReference; DownloadTask(MainActivity activity) { weakReference = new WeakReferenc

我正在使用AsyncTask使用下面的代码从URL链接下载视频

 public static class DownloadTask extends AsyncTask<String, Void, String> {
    WeakReference<MainActivity>weakReference;

     DownloadTask(MainActivity activity) {
        weakReference = new WeakReference<>(activity);
    }

    int TIMEOUTTIME = 7000;
    int TSOCKET = 30000;
    String TAG = "TAG";

    @Override
    protected String doInBackground(String... strings) {
        MainActivity subActivity = weakReference.get();
        if (!(activity == null || activity.isFinishing())){
            try {
                URL url = new URL(subActivity.videoUrl);
                long beginTime = System.currentTimeMillis();
                Log.i(TAG, "video download starting at: " + subActivity.videoUrl);

                //Open a connection to that URL.
                URLConnection urlCon = url.openConnection();

                urlCon.setReadTimeout(TIMEOUTTIME);
                urlCon.setConnectTimeout(TSOCKET);

                InputStream is = urlCon.getInputStream();
                BufferedInputStream inStream = new BufferedInputStream(is, 1024 * 5);
                activity.fileTitle = "oneTooMuch TYPE.mp4";
                FileOutputStream outStream  = activity.openFileOutput(activity.fileTitle,MODE_PRIVATE);
              
                byte[] buff = new byte[5 * 1024];

                while ((len = inStream.read(buff)) != -1) {
                    outStream.write(buff, 0, len);
                }

                outStream.flush();
                outStream.close();
                inStream.close();

                Log.i(TAG, "download completed in "
                        + ((System.currentTimeMillis() - startTime) / 1000)
                        + " sec");

            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
        return "Out Condition";
    }
公共静态类DownloadTask扩展了AsyncTask{
WeakreferencewakReference;
下载任务(主活动){
weakReference=新的weakReference(活动);
}
int TIMEOUTTIME=7000;
int TSOCKET=30000;
String TAG=“TAG”;
@凌驾
受保护的字符串背景(字符串…字符串){
MainActivity子活动=weakReference.get();
if(!(activity==null | | activity.isFinishing()){
试一试{
URL URL=新URL(subActivity.videoUrl);
long beginTime=System.currentTimeMillis();
Log.i(标签,“视频下载开始于:”+subActivity.videoUrl);
//打开到该URL的连接。
URLConnection urlCon=url.openConnection();
urlCon.setReadTimeout(超时时间);
urlCon.setConnectTimeout(TSOCKET);
InputStream is=urlCon.getInputStream();
BufferedInputStream inStream=新的BufferedInputStream(is,1024*5);
activity.fileTitle=“onetoomory TYPE.mp4”;
FileOutputStream outStream=activity.openFileOutput(activity.fileTitle,MODE_PRIVATE);
字节[]buff=新字节[5*1024];
而((len=流内读取(buff))!=-1){
超流写入(buff,0,len);
}
冲水;
exptream.close();
流内关闭();
Log.i(标记“下载已完成”
+((System.currentTimeMillis()-startTime)/1000)
+“sec”);
}捕获(格式错误){
e、 printStackTrace();
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}
返回“输出条件”;
}

该代码适用于下载视频文件,但当下载过程中出现断开连接时,可能是由于internet问题或活动中断,我需要一种方法在internet恢复或活动重新启动时恢复下载。有人可以提供代码片段或提示来帮助我如何实现这一点吗?我真的很乐意如果有人能提供帮助,请心存感激。

更好的解决方案是使用AsyncTask,而不是AsyncTask。服务与应用程序分开运行,具有更高的优先级。即使用户关闭应用程序,您也可以让他继续下载,并向他提供进度通知,这很方便,因为它为examp提供了更好的用户体验le用户可以在观看已下载的视频的同时下载视频。为此,您需要将移动服务返回到
如果您不想使用该服务,您可以使用WorkManager进行后台操作

谢谢@Vojin p的帮助。我想我必须阅读一下[Service],因为我几乎不知道它的用法。不过,有一个问题,我可以在使用[Service]时下载到私有内部存储吗?你的意思是下载并保存某些内容,以便只有你的应用程序才能访问它吗?这些是存储类型