iOS 学习 - 10下载(3) NSURLSession 音乐 篇
使用 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 音乐 篇的更多相关文章
- iOS 学习 - 10下载(4) NSURLSession 会话 篇
NSURLConnection通过全局状态来管理cookies.认证信息等公共资源,这样如果遇到两个连接需要使用不同的资源配置情况时就无法解决了,但是这个问题在NSURLSession中得到了解决.N ...
- iOS 学习 - 10下载(2) NSURLSession 图片 篇
使用NSURLSessionDownloadTask下载文件的过程与前面差不多,需要注意的是文件下载文件之后会自动保存到一个临时目录,需要开发人员自己将此文件重新放到其他指定的目录中. // // V ...
- iOS 学习 - 10下载(1) NSURLConnection 篇
程序的实现需要借助几个对象: NSURLRequest:建立了一个请求,可以指定缓存策略.超时时间.和NSURLRequest对应的还有一个NSMutableURLRequest,如果请求定义为NSM ...
- iOS学习笔记23-音效与音乐
一.音频 在iOS中,音频播放从形式上能够分为音效播放和音乐播放. * 音效: * 主要指一些短音频的播放,这类音频一般不须要进行进度.循环等控制. * 在iOS中.音效我们是使用AudioToolb ...
- ios学习- 10大iOS开发者最喜爱的类库
该10大iOS开发者最喜爱的库由“iOS辅导团队”成员Marcelo Fabri组织投票选举而得,参与者包括开发者团队,iOS辅导团队以及行业嘉宾.每个团队都要根据以下规则选出五个最好的库: 1)不能 ...
- iOS学习10之OC类和对象
本次是OC的第一节课,主要是学习和理解类与对象 1.面向对象 1> OOP(Object Oriented Programming)面向对象编程. 面向对象以事物为中心,完成某件事情都需要哪些事 ...
- [有料组每日学习分享计划--00087]32行代码帮你导出IOS酷我音乐下载的无损音乐
需求与研究: 1.IOS的酷我音乐软件,还是不错滴,可以直接下载APE或是320K的MP3音乐,但是我发现PC上的酷我反而没这个功能,而且其他的音乐软件一般只能下载中低品质的音乐.所以能够从IOS中找 ...
- iOS冰与火之歌(番外篇) - 基于PEGASUS(Trident三叉戟)的OS X 10.11.6本地提权
iOS冰与火之歌(番外篇) 基于PEGASUS(Trident三叉戟)的OS X 10.11.6本地提权 蒸米@阿里移动安全 0x00 序 这段时间最火的漏洞当属阿联酋的人权活动人士被apt攻击所使用 ...
- iOS学习笔记之异步图片下载
写在前面 在iOS开发中,无论是在UITableView还是在UICollectionView中,通过网络获取图片设置到cell上是较为常见的需求.尽管有很多现存的第三方库可以将下载和缓存功能都封装好 ...
随机推荐
- SQL Server论坛楼层计算触发器
代码: USE suya_dev GO IF EXISTS( SELECT * FROM sys.triggers WHERE name = N'BBS_Post_before_insert' ) D ...
- 【人在江湖飘,哪有不带刀】神器Jumony
大神博客:http://www.cnblogs.com/Ivony/p/3447536.html 项目地址:https://github.com/Ivony/Jumony 1.安装Jumony包 在N ...
- 聊一下C#开发者如何过渡到JAVA 开发者
由于工作需要,最近也开始倒腾Java了.NET的话,从2012年测试版开始玩的,那个时候VB6比较熟悉,还天真的以为VB.NET以后会很火, 事实证明,也只是一厢情愿,有C#了,要VB.NET干什么? ...
- WPF 将DLL嵌入EXE文件(安装包)
网上很多例子,各种套路,就是没有测试过. WPF 将DLL嵌入EXE文件的套路是这样的 1.将要引用的dll源文件添加到wpf 项目中,dll 的属性->生成操作为[嵌入的资源]. 2.监听 ...
- 身份证验证合法性js--已验证
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- idea配置maven并添加镜像配置
1.打开maven存放文件夹找到 conf ->settings.xml 找到<mirrors>节点把下面内容写入节点内 配置为阿里云的镜像 <mirror> <i ...
- 通过参数传递,判断数字、字符串、list、tuple、词典等数据类型是否为可变数据对象
list: >>> a = [1,2,3,4]>>> a[0]1>>> a[1]2>>> a[0] = 10>>&g ...
- 实用的Scala泛函编程
既然谈到实用编程,就应该不单止了解试试一个新的编程语言那么简单了,最好通过实际的开发项目实例来演示如何编程.心目中已经有了一些设想:想用Scala泛函编程搞一个开源的数据平台应用系统,也就是在云平台P ...
- SDL教程第一和第二个视频的笔记
观看正月点灯笼的SDL教程,地址http://www.tudou.com/listplay/9eG9tkk91oQ.html #include <stdio.h> #include < ...
- Java Session超时设置
1.jsp页面直接设置 ); 2.web.xml设置,覆盖 ...