使用 NSURLSession 下载,需要注意的是文件下载文件之后会自动保存到一个临时目录,需要开发人员自己将此文件重新放到其他指定的目录中

//
// ViewController.m
// Web相关
//
// Copyright © 2016年 asamu. All rights reserved.
//
//http://mr7.doubanio.com/832d52e9c3df5c13afd7243a770c094f/0/fm/song/p294_128k.mp3
#import "ViewController.h"
#import <AVFoundation/AVFoundation.h> @interface ViewController ()
@property(nonatomic,strong)AVAudioPlayer *avaudioPlayer;
@end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
[self downloadFile];
} -(void)playMusic{
//获取缓存目录
NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject];
//获取缓存目录下的歌曲
NSString *filePath = [cachePath stringByAppendingPathComponent:@"xxx.mp3"];
/*
fileURLWithPath: 文件链接
URLWithString: http链接
*/
NSURL *fileUrl = [NSURL fileURLWithPath:filePath];
//判断文件存不存在
if(
[[NSFileManager defaultManager]fileExistsAtPath:filePath]){
NSLog(@"exist"); NSError *error;
_avaudioPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:fileUrl error:&error]; if (error) {
NSLog(@"%@",error.localizedDescription);
}
//加入缓存
[_avaudioPlayer prepareToPlay];
//播放
[_avaudioPlayer play];
}
}
#pragma mark - 私有方法
-(void)downloadFile{ NSString *filename = @"xxx.mp3";
//获取 URL
NSString *urlStr = [NSString stringWithFormat:@"http://mr7.doubanio.com/832d52e9c3df5c13afd7243a770c094f/0/fm/song/p294_128k.mp3",filename];
NSURL *url = [NSURL URLWithString:urlStr];
//创建请求
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//创建会话(全局会话)
NSURLSession *session = [NSURLSession sharedSession];
//创建任务
NSURLSessionDownloadTask *downloadTak = [session downloadTaskWithRequest:request completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
//获取缓存目录
NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject];
//歌存到缓存目录,并命名
NSString *savePath = [cachePath stringByAppendingPathComponent:filename];
//得到路径,打开终端 open 去掉 xxx.mp3 的目录,就可以直观的看到 MP3文件的下载
NSLog(@"%@",savePath); NSURL *saveurl = [NSURL fileURLWithPath:savePath];
/*
1.location 是下载后的临时保存路径,需要将它移动到需要保存的位置
2.move faster than copy
(1).因为 copy 需要在磁盘上生成一个新的文件,这个速度是很慢的;
(2).copy 后,还要把临时文件删除,move 这一步就行了 = (copy + remove)
3.move 有两个功能 一是移动 二是重命名
*/
NSError *saveError;
[[NSFileManager defaultManager]moveItemAtURL:location toURL:saveurl error:&saveError]; //如果错误存在,输出
if (saveError) {
NSLog(@"%@",saveError.localizedDescription);
}
//播放
[self playMusic];
}];
//执行任务
[downloadTak resume];
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
} @end

iOS 学习 - 10下载(3) NSURLSession 音乐 篇的更多相关文章

  1. iOS 学习 - 10下载(4) NSURLSession 会话 篇

    NSURLConnection通过全局状态来管理cookies.认证信息等公共资源,这样如果遇到两个连接需要使用不同的资源配置情况时就无法解决了,但是这个问题在NSURLSession中得到了解决.N ...

  2. iOS 学习 - 10下载(2) NSURLSession 图片 篇

    使用NSURLSessionDownloadTask下载文件的过程与前面差不多,需要注意的是文件下载文件之后会自动保存到一个临时目录,需要开发人员自己将此文件重新放到其他指定的目录中. // // V ...

  3. iOS 学习 - 10下载(1) NSURLConnection 篇

    程序的实现需要借助几个对象: NSURLRequest:建立了一个请求,可以指定缓存策略.超时时间.和NSURLRequest对应的还有一个NSMutableURLRequest,如果请求定义为NSM ...

  4. iOS学习笔记23-音效与音乐

    一.音频 在iOS中,音频播放从形式上能够分为音效播放和音乐播放. * 音效: * 主要指一些短音频的播放,这类音频一般不须要进行进度.循环等控制. * 在iOS中.音效我们是使用AudioToolb ...

  5. ios学习- 10大iOS开发者最喜爱的类库

    该10大iOS开发者最喜爱的库由“iOS辅导团队”成员Marcelo Fabri组织投票选举而得,参与者包括开发者团队,iOS辅导团队以及行业嘉宾.每个团队都要根据以下规则选出五个最好的库: 1)不能 ...

  6. iOS学习10之OC类和对象

    本次是OC的第一节课,主要是学习和理解类与对象 1.面向对象 1> OOP(Object Oriented Programming)面向对象编程. 面向对象以事物为中心,完成某件事情都需要哪些事 ...

  7. [有料组每日学习分享计划--00087]32行代码帮你导出IOS酷我音乐下载的无损音乐

    需求与研究: 1.IOS的酷我音乐软件,还是不错滴,可以直接下载APE或是320K的MP3音乐,但是我发现PC上的酷我反而没这个功能,而且其他的音乐软件一般只能下载中低品质的音乐.所以能够从IOS中找 ...

  8. iOS冰与火之歌(番外篇) - 基于PEGASUS(Trident三叉戟)的OS X 10.11.6本地提权

    iOS冰与火之歌(番外篇) 基于PEGASUS(Trident三叉戟)的OS X 10.11.6本地提权 蒸米@阿里移动安全 0x00 序 这段时间最火的漏洞当属阿联酋的人权活动人士被apt攻击所使用 ...

  9. iOS学习笔记之异步图片下载

    写在前面 在iOS开发中,无论是在UITableView还是在UICollectionView中,通过网络获取图片设置到cell上是较为常见的需求.尽管有很多现存的第三方库可以将下载和缓存功能都封装好 ...

随机推荐

  1. Date对象之应用技巧

    new Date(2014,4,15);设置日期为2014年4月15日 var cur=new Date(); var prev=new Date(cur.setDate(cur.getDate()- ...

  2. LeetCode - Path Sum

    题目: Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up ...

  3. C#去掉HTML标记

    该方法亲测可行,下面直接粘贴代码. public string RemoveHTMLTags(string htmlStream) { if (htmlStream == null) { throw ...

  4. foreach DataTable或Table时要略过第一行。

    昨天有续写一个练习<输入数字动态创建行(二)>http://www.cnblogs.com/insus/p/4916260.html ,最终是需要把数据存入数据库中. 在循环ASP:Tab ...

  5. 他答对一半(打一字)asp.net开源简答题项目

    先出个字谜: 他答对一半(打一字) 你猜出来了没? 可以到这个网址答题:http://m.hovertree.com/miyu/bjae/4fpmm2td.htm 看你的答案是否正确. 这是ASP.N ...

  6. Swift注释

    Swift 中的普通注释与 Objective-C 中的一致,大概分为以下三种 // 单行注释 何问起 / *  多行注释 hovertree.com */ /// 标记注释1 http://hove ...

  7. 介绍开源的.net通信框架NetworkComms框架 源码分析(七)ProtobufSerializer

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  8. 基于.Net Framework 4.0 Web API开发(4):ASP.NET Web APIs 基于令牌TOKEN验证的实现

    概述:  ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是在使用API的时候总会遇到跨域请求的问题, ...

  9. sql 指定值排序

    --SELECT [ButtonName] as text,[FunctionName] as handler,[iconCls] --FROM [ButtonTable] where PKID in ...

  10. Java递归列出所有文件和文件夹

    package file_op; import java.io.File; public class file_list { static int n =0; /** * @param args */ ...