zoukankan      html  css  js  c++  java
  • iOS UIFileSharingEnabled

    一、让iOS App通过iTunes进行文件交换Documents

    让iOS App通过iTunes进行文件交换

    有一些App需要通过使用iTunes让用户上传和下载文档。要让iOS程序支持iTunes文件交换其实很简单,

    只需要在程序的Info.plist里增加一个键:UIFileSharingEnabledApplication supports iTunes file sharing),赋值YES

    这样,编译之后进行机上运行的时候,连接设备到iTunes,就能进行文件交换了。

    如果是在iOS Simulator中进行测试,可以把文件放到应用程序的“用户目录”的“Documents”下。要知道用户目录在OSX下的路径,

    可以NSLog(@"%@", NSHomeDirectory());运行一下就知道了,

    用户家目录在OSX下的路径类似这个:

    /Users/venj/Library/Application Support/iPhone Simulator/4.3.2/Applications/158C149B-FF57-4C62-AEDB-DFB7A3BD8AFB

    我做了一个简单的程序进行测试,在Simulator中运行的时候,把文件放到用户目录下,下图是用户目录在OSX下的内容,

    把文件放到Documents下就可以了:

    然后在程序中测试文件有没有成功被程序识别:

       

    NSFileManager *manager = [NSFileManager defaultManager];    NSString *dbPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"db.sqlite"];

        if ([manager fileExistsAtPath:dbPath]) {        self.navigationItem.title = @"Ready To Go";    }    else {        self.navigationItem.title = @"No DB File";    }

    下面是程序在添加文件前后的运行情况:

     

    二、App与iTunes文件传输的方法和对iOS App文件结构的说明

    就像很多iOS上面的播放器App一样,本文编写一个程序可以通过iTunes往里面放文件,比如编写一个音乐播放器程序,通过itune往里面放歌曲文件,然后通过这个App来播放这首歌曲,首先我创建了一个普通的SingleView程序,叫做FileShareDemo。下面是通过iTunes往App传输文件的截图:

    可以看到像GPlayer,AcePlayer播放器,视频资源通过这种方式传输是很普遍的(很多苹果用户确实不知道这样可以传输数据),这里我创建了一个App叫做FileShareDemo,可以看到,也可以往里面拖拽数据,这里拖拽了一首歌2.mp3,但是默认情况下创建的App是不可以出现在左边栏的,需要按下图在plist里面加一行:

    接下来的工作是判断有没有导入进去,下面的代码我写在了viewdidload里:

     NSFileManager *manager=[NSFileManager defaultManager];

    NSString *path=[[NSHomeDirectory() stringByAppendingPathComponent:@”Documents”] stringByAppendingPathComponent:@”2.mp3″];

    if ([manager fileExistsAtPath:path]) {

    showLabel.text=@”have file”;

    }else {

    showLabel.text=@”have no file”;

    }

    NSLog(@”NSHomeDirectory %@”,NSHomeDirectory());

     这里有几点要说明,首先NSHomeDirectory()打印出来是

    /var/mobile/Applications/8F01293C-C02D-4EF8-A9F7-1A7B10944F33

    这个是程序的路径,8F01293C-C02D-4EF8-A9F7-1A7B10944F33是每个App独特的标记,比如愤怒的小鸟会是另一串信息,具体干嘛的不清楚。然后我在后面添加了/Documents和/2.mp3,通过[manager fileExistsAtPath:path]来判断这个路径存不存在,用一个label打印出来。如果拖拽进去了可以看到label的内容是“have file”,通过程序运行的label信息可以看到/var/mobile/Applications/8F01293C-C02D-4EF8-A9F7-1A7B10944F33/Documents/2.mp3就是导入的文件的路径。

    之后我们可以通过这段代码来播放歌曲:

     NSError* err;

    player = [[AVAudioPlayer alloc]

    initWithContentsOfURL:[NSURL fileURLWithPath:path]

    error:&err ];

    player.volume=0.7;

    [player play];

    之前的path直接在这里可以用。

    下面再次补充一下文件的结构问题:

    每个程序都会包含这几个文件,Documents就是iTunes导入的文稿存储的地方,FileShareDemo是Xcode项目包,如果通过Xcode往项目里放素材什么的都在这里,后两个不知道有什么具体作用。

    特别提醒:

    如果app不涉及文档的上传和下载,Application supports iTunes file sharing应设置为NO或删除此key,否则会被拒.

    参考链接:

    https://my.oschina.net/hmj/blog/112592

  • 相关阅读:
    AOP 相关包
    Dubbo学习(一) Dubbo原理浅析
    maven 三个仓库表
    关于servlet中doGet和doPost乱码再一次理解
    关于对String中intern方法的理解
    模拟文件上传(五):为文件添加描述信息
    模拟文件上传(四):对于前面三版中一些出错细节进行处理
    对于模拟文件上传(三)中,批量上传,传空值抛异常前台约束实现
    模拟文件上传(三):使用apache fileupload组件进行文件批量上传
    模拟文件上传(二):使用apache fileupload组件进行文件上传
  • 原文地址:https://www.cnblogs.com/lurenq/p/7810315.html
Copyright © 2011-2022 走看看