当我单击按钮时,每次都会加载音频。如果音频已经上传,如何立即播放?
- (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
sharedSession
和downloadTaskWithURL
方法。
Ray Wenderlich有一个关于使用NSURLSession
和NSURLSessionDownloadTask
的教程:
NSURL 创建教程