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上是较为常见的需求.尽管有很多现存的第三方库可以将下载和缓存功能都封装好 ...
随机推荐
- 『给它加个壳』纯MarkDown博客阅读体验优化
今天鼓捣了一天纯MarkDown书写的博客样式的美化,事实证明图表较多的MarkDown撰写的博文一样可以展现出非常漂亮的效果.为了让纯MarkDown书写的博客有一个干净舒服的阅读体验,我主要针对博 ...
- Android Studio快捷键每日一练(5)
原文地址:http://www.developerphil.com/android-studio-tips-of-the-day-roundup-5/ 42.Enter键和Tab键补全 快捷键:Ent ...
- MyEclipse中常用的快捷键大全,快来.....
在这里分享点常用的快捷键,希望对你有帮助! Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率.Eclipse中有如下一些和编辑相关的快捷键. 1. [ALT+/] ...
- 自己实现简单Web服务器,支持GET POST请求
最近项目上遇到一个需求,最后想到的解决方案是自己实现一个web服务器去处理请求,然后再将信息发送到另外一个程序.然后返回处理之后的结果呈现出来. 现在我就来分享一下如何实现的. 通过.NET 为我们提 ...
- jQuery漂亮图标的垂直导航菜单
效果展示 http://hovertree.com/texiao/nav/3/ jQuery漂亮图标的垂直导航菜单 是一款当鼠标滑过菜单项时,会有一个背景遮罩层跟着鼠标移动,效果非常炫酷,图标还是矢量 ...
- webstorage[html5的本地数据处理]
1.webStorage是什么? webStorage是html5中用于本地化存储的一种方式,而在之前呢我们是用cookie的存储方式处理; 2.那它们之间的区别是什么? Ⅰ.cookie存在的问题: ...
- C#操作XML文件
1.创建.读取XML文件 using System; using System.Collections.Generic; using System.Linq; using System.Text; u ...
- thinkphp中assign()和display()区别和用法
- form表单及其中元素
<form method=get/post action="提交路径"> 单行文本域:<input type="text" name=&quo ...
- 点我吧工作总结(技术篇) zookeeper
我思故我在,提问启迪思考! 1.什么是zookeeper? 2.zookeeper与dubbo.springMVC之间的协同工作? http://doc.okbase.net/congcong68/a ...