afnetworking - AFNetworking 3.0 下载后台模式
问题描述
我使用AFNetworking库 3.0 下载文件。我为 AFNetworking 会话创建了单例,但是当我的手机进入锁屏会话时已被取消。我的项目也接受“后台获取模式”我做错了什么?感谢帮助!我的代码如下:
-(void)downloadShowingProgress:(NSString *)url nameString:(NSString *)nameString indexPath:(NSIndexPath *)indexPath{
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
NSURL *URL = [NSURL URLWithString:url];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
self.downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *directoryURL = [fileManager URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
NSURL *documentsDirectoryURL = [directoryURL URLByAppendingPathComponent:@".fade"];
NSError *error;
if ([fileManager createDirectoryAtURL:documentsDirectoryURL withIntermediateDirectories:YES attributes:nil error:&error]){
NSLog(@"Create Sucess");
}
else{
NSLog(@"Create error: %@", error);
}
return [documentsDirectoryURL URLByAppendingPathComponent:[NSString stringWithFormat:@"%@.mp3",nameString]];
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
NSLog(@"** File downloaded to: %@", filePath);
}];
[self.downloadTask resume];
}
解决方案
你必须像这样添加 backgroundSessionConfigurationWithIdentifier:
-(void)downloadShowingProgress:(NSString *)url nameString:(NSString *)nameString indexPath:(NSIndexPath *)indexPath{
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"download-task"];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
NSURL *URL = [NSURL URLWithString:url];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
self.downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *directoryURL = [fileManager URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
NSURL *documentsDirectoryURL = [directoryURL URLByAppendingPathComponent:@".fade"];
NSError *error;
if ([fileManager createDirectoryAtURL:documentsDirectoryURL withIntermediateDirectories:YES attributes:nil error:&error]){
NSLog(@"Create Sucess");
}
else{
NSLog(@"Create error: %@", error);
}
return [documentsDirectoryURL URLByAppendingPathComponent:[NSString stringWithFormat:@"%@.mp3",nameString]];
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
NSLog(@"** File downloaded to: %@", filePath);
}];
[self.downloadTask resume];
}
推荐阅读
- android - 为什么我取消倒计时取消不起作用
- python - 如何解决我在 pycharm 菜单显示中运行但不起作用的问题?
- javascript - 如何在类中注入依赖项
- javascript - 如何在 JavaScript 任务队列中对(宏)任务进行排队?
- android - 为什么我的底部导航栏没有出现
- reactjs - 使用 Typescript 进行 React 和 Google 自动完成
- php - 使用选项卡时的 Ajax 问题
- javascript - 运行 Facebook API 时出现未定义的错误消息
- c# - 有没有办法在一个操作中设置多个变量c#
- c - 本地性与更改 argc 和 argv 的名称有什么关系?