如何检查音频是否可以脱机使用?

时间:2016-03-20 14:54:23

标签: ios audio download

当我点击按钮时,每次都会加载音频。如果音频已经上传,如何立即播放音频?

- (void) song{
if (_index1 == 0) {
    NSString *stringURL = @"https://drive.google.com/uc?export=download&id=0B6zMam2kAK39UjJuTHB5QWRuRU0";
    NSURL  *url = [NSURL URLWithString:stringURL];
    NSData *urlData = [NSData dataWithContentsOfURL:url];
    if ( urlData )
    {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];

        NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"music.mp3"];
        [urlData writeToFile:filePath atomically:YES];
        self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:filePath] error:nil];
    }
  }
}

1 个答案:

答案 0 :(得分:0)

您的代码始终保存到文档目录中的“music.mp3”文件中。 (你应该使用NSString方法来处理路径而不是stringWithFormat。看看stringByAppendingPathComponent。它处理为你构建路径字符串的细节。)

我认为你只处理一个声音文件呢?

如果要检查文件是否存在,则需要创建NSFileManager的实例并使用其中一种fileExists方法,例如fileExistsAtPath。如果该文件存在,请跳过下载并只需加载并播放该文件。

请注意,您不应使用dataWithContentsOfURL从Web下载文件。这是一个同步调用,会阻止UI直到下载完成。您应该使用NSURLSession代替。您可以创建NSURLDownloadTask并将文件直接下载到磁盘,然后在下载完成后调用一段代码。

查看NSURLSession sharedSessiondownloadTaskWithURL方法。

Ray Wenderlich有一个关于使用NSURLSessionNSURLSessionDownloadTask

的教程

NSURLSession Tutorial