iOS - 文件读取操作

2021-10-28  本文已影响0人  西瓜一号

项目需求

1.从微信\QQ导入文件
2.从iCloud导入文件

思路

从微信/QQ导入文件

1.APP内打开微信/QQ
2.微信/QQ选取文件
3.选择其他应用打开
4.APP内接收

从本地导入文件

1.打开iCloud
2.选择文件
3.APP内接收

实现需求1

1.APP内打开微信/QQ,首先需要设置白名单,在项目info.plist文件添加LSApplicationQueriesSchemes字段,类型设置Array,添加微信:weixin;QQ:mqq,添加完成如下图所示:

<key>LSApplicationQueriesSchemes</key>
    <array>
        <string>mqq</string>
        <string>weixin</string>
    </array>
image.png

2.添加其他应用打开权限,在项目info.plist文件添加CFBundleDocumentTypes字段,类型设置Array

<key>CFBundleDocumentTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeName</key>
            <string></string>
            <key>LSHandlerRank</key>
            <string>Default</string>
            <key>LSItemContentTypes</key>
            <array>
                <string>com.adobe.pdf</string>
                <string>com.microsoft.word.doc</string>
                <string>com.microsoft.powerpoint.ppt</string>
                <string>public.item</string>
                <string>public.data</string>
                <string>public.text</string>
                <string>public.content</string>
                <string>public.composite-content</string>
            </array>
        </dict>
    </array>
image.png

3.app内打开微信/QQ

//从qq获取文件
- (IBAction)touchGoQQBtn:(id)sender {
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"mqq://"]]) {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mqq://"] options:@{} completionHandler:nil];
    }
}
//从微信获取文件
- (IBAction)touchGoWeChatBtn:(id)sender {
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"weixin://"]]) {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"weixin://"] options:@{} completionHandler:nil];
    }
    
}

4.微信/QQ内操作
打开文件

微信打开文件.jpg 微信选择其他应用打开.jpg 选择我们的项目.jpg

5.app内接收文件,在AppDelegate添加以下方法

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    // 文件路径file:///private/var/mobile/Containers/Data/Application/B5C8630F-0A5D-4795-B3D0-81B8CCAB6909/Documents/Inbox/%E9%A1%B9%E7%9B%AE%E5%91%A8%E6%8A%A5%E6%B1%87%E6%80%BB202100607.xlsx
    NSLog(@"url  %@",[url absoluteString]);
    // 通过前缀来判断是文件
    if ([[url absoluteString] containsString:@"file"]) {
        NSArray *array = [[url absoluteString] componentsSeparatedByString:@"/"];
       // 去除前缀
        NSString *fileName = [array lastObject];
        fileName = [fileName stringByRemovingPercentEncoding];
       //发送通知,附带文件路径
        [[NSNotificationCenter defaultCenter] postNotificationName:@"xx" object:path];
        //或者本地存储
        //Documents目录 :用于存储用户数据或其它应该定期备份的信息。
        // tmp 目录:这个目录用于存放临时文件,保存应用程序再次启动过程中不需要的信息。
        NSString *path = [NSHomeDirectory() stringByAppendingString:[NSString stringWithFormat:@"/Documents/xx/%@",fileName]];

        NSData *data = [NSData dataWithContentsOfFile:path];
        //文件写入结果
        BOOL result = [data writeToFile:path atomically:YES];

    }
    return YES;
}

6.接收通知,根据需求处理,,,,

实现需求2

1、登陆开发者后台,配置权限,选择自己的项目

选择自己的项目.png 勾选iCloud权限.png

Edit选择自己的项目
2.xcode配置


image.png
image.png
image.png

以上配置如有遗漏,可能造成的后果有,或不走回调,或回调返回失败,或不能获取文件路径等

3.代码实现
打开iCloud

//从icloud获取文件
- (IBAction)touchGoiCloudBtn:(id)sender {
    
    //设置可以打开的文件类型,如没有设置可打开的类型,iCloud文件将是灰色,无法选中
    NSArray *documentTypes = @[@"public.content", @"public.text", @"public.source-code ", @"public.image", @"public.audiovisual-content", @"com.adobe.pdf", @"com.apple.keynote.key", @"com.microsoft.word.doc", @"com.microsoft.excel.xls", @"com.microsoft.powerpoint.ppt"];
    UIDocumentPickerViewController *documentPickerViewController = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:documentTypes inMode:UIDocumentPickerModeOpen];
    documentPickerViewController.delegate = self;
    [self presentViewController:documentPickerViewController animated:YES completion:nil];
    
}
#pragma mark - UIDocumentPickerDelegate
- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url {
    
    NSArray *array = [[url absoluteString] componentsSeparatedByString:@"/"];
    NSString *fileName = [array lastObject];
    fileName = [fileName stringByRemovingPercentEncoding];
    
   //如需存储本地,还需从iCloud下载数据
}

需求完成,收工干饭

上一篇下一篇

猜你喜欢

热点阅读