即使在杀死并重新启动应用程序后,如何在本机 iOS 中下载音频文件?

Posted

技术标签:

【中文标题】即使在杀死并重新启动应用程序后,如何在本机 iOS 中下载音频文件?【英文标题】:How download audio files in react native iOS even after kill and relaunch the app? 【发布时间】:2020-10-16 23:51:43 【问题描述】:

我的应用中有一个使用 React Native (0.59) 开发的场景,我正在尝试下载音频文件。即使用户杀死并重新启动它,我也想继续下载。我正在尝试 'react-native-background-downloader' 包。即使在杀死并重新启动应用程序后,我也会在模拟器中下载和播放。但不是在实际设备中。任何建议将不胜感激。

这是我正在使用的代码块

let task = RNBackgroundDownloader.download(
    id: fileName,
    url: fileUrl,
    destination: `$RNBackgroundDownloader.directories.documents/$fileName`,
    
  ).begin((expectedBytes) => 
    console.log(`Going to download $expectedBytes bytes!`);
  ).progress((percent) => 
    console.log(`Downloaded: $percent * 100%`);
  ).done(() => 
    console.log('Download is done!');
  ).error((error) => 
    console.log('Download canceled due to error: ', error);
  );  

这是我的简历任务

 let lostTasks = await RNBackgroundDownloader.checkForExistingDownloads();
  for (let task of lostTasks) 
    console.log(`Task $task.id was found!`);
    task.progress((percent) => 
      console.log(`Re-Downloaded: $percent * 100%`);
    ).done(() => 
      console.log('Re-Downlaod is done!');
    ).error((error) => 
      console.log('Re-Download canceled due to error: ', error);
    );
  

我能够看到重新下载:99%,然后我收到类似的错误 '由于错误取消重新下载:','“CFNetworkDownload_jtLLac.tmp”无法移动到“文档”,因为前者不存在,或者包含后者的文件夹不存在。

【问题讨论】:

【参考方案1】:

ios - 额外的强制步骤

在您的 AppDelegate.m 中添加以下代码:

..
#import <RNBackgroundDownloader.h>

...

- (void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier completionHandler:(void (^)(void))completionHandler

  [RNBackgroundDownloader setCompletionHandlerWithIdentifier:identifier completionHandler:completionHandler];


...

未能添加此代码将导致后台下载被取消。

并且只使用 RNBackgroundDownloader.directories.documents 作为目的地。

【讨论】:

以上是关于即使在杀死并重新启动应用程序后,如何在本机 iOS 中下载音频文件?的主要内容,如果未能解决你的问题,请参考以下文章

iOS应用程序启动图像后杀死

iOS 应用程序被杀死并重新启动显示我的最后一个 VC

即使设备在本机反应中重新启动,如何运行后台任务?

即使在应用程序被杀死后如何继续进行 iOS 位置跟踪?

在应用程序被杀死并重新启动后,Android 应用程序黑暗主题消失了

如何将 TextInput 的值存储到本地存储并在应用程序以本机反应启动时获取它们?