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
时间: 2024-08-29 02:43:34

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

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

NSURLConnection通过全局状态来管理cookies.认证信息等公共资源,这样如果遇到两个连接需要使用不同的资源配置情况时就无法解决了,但是这个问题在NSURLSession中得到了解决.NSURLSession同时对应着多个连接,会话通过工厂方法来创建,同一个会话中使用相同的状态信息.NSURLSession支持进程三种会话: defaultSessionConfiguration:进程内会话(默认会话),用硬盘来缓存数据. ephemeralSessionConfiguration

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

使用NSURLSessionDownloadTask下载文件的过程与前面差不多,需要注意的是文件下载文件之后会自动保存到一个临时目录,需要开发人员自己将此文件重新放到其他指定的目录中. // // ViewController.m // NSURLSession // // Copyright © 2016年 asamu. All rights reserved. // #import "ViewController.h" @interface ViewController () @e

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

一.音频 在iOS中,音频播放从形式上能够分为音效播放和音乐播放. * 音效: * 主要指一些短音频的播放,这类音频一般不须要进行进度.循环等控制. * 在iOS中.音效我们是使用AudioToolbox.framework框架实现. * 音乐: * 主要指一些较长的音频,通常须要对播放进行精确控制. * 在iOS中,音乐我们是使用AVFoundation.framework框架实现. 二.音效 AudioToolbox.framework框架是一套基于C语言的框架 它的实现原理是将短音频注冊到

iOS学习之旅10 ATS(App Transport Security)对HTTPS协议要求引起的问题

问题描述 编写以下代码获取网络某个资源的MIMEType 1 -(void)getMIMEType 2 { 3 //路径 4 NSURL *url = [NSURL URLWithString:@"https://www.baidu.com/img/bd_logo1.png"]; 5 //请求对象 6 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 7 NSOperationQueue *

iOS学习笔记13-网络(二)NSURLSession

在2013年WWDC上苹果揭开了NSURLSession的面纱,将它作为NSURLConnection的继任者.现在使用最广泛的第三方网络框架:AFNetworking.SDWebImage等等都使用了NSURLSession.作为iOS开发人员,应该紧随苹果的步伐,不断的学习,无论是软件的更新.系统的更新.API的更新,而不能墨守成规. 相比较NSURLConnection,NSURLSession提供了 配置会话缓存.协议.cookie和证书能力,这使得网络架构和应用程序可以独立工作.互不干

iOS学习资源收集

https://github.com/Tim9Liu9/TimLiu-iOS 自己总结的iOS.mac开源项目及库,持续更新.... github排名 https://github.com/trending,github搜索:https://github.com/search 目录 UI 下拉刷新 模糊效果 AutoLayout 富文本 图表 表相关与Tabbar 隐藏与显示 HUD与Toast 对话框 其他UI 动画 侧滑与右滑返回手势 gif动画 其他动画 网络相关 网络连接 图像获取 网络

iOS学习笔记-精华整理

iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始等待用户的操作,自动释放池就会被释放掉(调用dealloc),池中的对象都会收到一个release,有可能会因此被销毁. 2-成员属性:     readonly:不指定readonly,默认合成getter和setter方法.外界毫不关心的成员,则不要设置任何属性,这样封装能增加代码的独立性和安全

IOS学习之segmented control

转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/27086877 作者:小马 什么是segmented control? 先上几张图:                     这几幅图就是典型的segmented control UI视图, 第一幅是某个游戏程序,红色框出来的就是segmentedcontrol. 后面三幅是我这篇博文做的demo演示样例. segmented control有例如以下几个特征: 1一般是在单视图中

iOS: 学习笔记, 使用performSelectorOnMainThread及时刷新UIImageView

在iOS中, 界面刷新在主线程中进行, 这导致NSURLSession远程下载图片使用UIImageView直接设置Image并不能及时刷新界面. 下面的代码演示了如何使用 performSelectorOnMainThread: withObject:  waitUntilDone: 方法来及时刷新图片 1. 创建iOS空应用程序(Empty Application). 2. 加入一个控制器类. 在YYAppDelegate.m中修改 #import "MainViewController.h