如何检查音频是否离线可用



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

- (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];
    }
  }
}

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

我发现你只处理一个声音文件?

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

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

看看NSURLSession sharedSessiondownloadTaskWithURL方法。

Ray Wenderlich有一个关于使用NSURLSessionNSURLSessionDownloadTask的教程:

NSURL 创建教程

最新更新