美文网首页iOS Developer
给 APP添加外部文件导入功能

给 APP添加外部文件导入功能

作者: Arclin | 来源:发表于2017-06-21 15:09 被阅读394次

    意思就是在其他app点击分享之类的按钮时会出现 '用xxxx(你的app名字)导入' 然后你就可以吧这个文件导入你的app的沙盒当中.

    1. 修改 info.plist(这里public.data是允许所有文件类型,如果要特定某种类型的文件,如只允许导入PPT, 或者Word文档, 那么就得添加多个CFBundleTypeName CFBundleTypeRole LSHandlerRank LSItemContentTypes 具体见苹果API文档)
     <key>CFBundleDocumentTypes</key>
        <array>
            <dict>
                <key>CFBundleTypeIconFiles</key>
                <array/>
                <key>CFBundleTypeName</key>
                <string>data</string>
                <key>CFBundleTypeRole</key>
                <string>Viewer</string>
                <key>LSHandlerRank</key>
                <string>Default</string>
                <key>LSItemContentTypes</key>
                <array>
                    <string>public.data</string>
                </array>
            </dict>
        </array>
        
    
    1. APPDelegate.h

    获取到根控制器,执行复制到Document文件夹方法
    源路径:url.path

    @property (strong, nonatomic) NSURL *sharedURL;
    
    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
    {
        if(url.fileURL){
            self.sharedURL = url;
            UIViewController *vc = self.window.rootViewController;
            if ([vc isKindOfClass:[UINavigationController class]]) {
                UINavigationController * nav = (UINavigationController *)self.window.rootViewController;
                UIViewController *topVC = nav.childViewControllers.firstObject;
                if ([topVC respondsToSelector:@selector(handleSharedFile)]) {
                    [topVC performSelectorOnMainThread:@selector(handleSharedFile) withObject:nil waitUntilDone:NO];
                }
            } else {
                if ([vc respondsToSelector:@selector(handleSharedFile)]) {
                    [vc performSelectorOnMainThread:@selector(handleSharedFile) withObject:nil waitUntilDone:NO];
                }
            }
        }
    }
    
    1. 根控制器方法(头文件需要声明方法)
    - (void)handleSharedFile {
        AppDelegate *app = (AppDelegate *)[UIApplication sharedApplication].delegate;
        if (app.sharedURL != nil) {
            self.sharedURL = [app.sharedURL copy];
            app.sharedURL = nil;
            [self saveSharedFile:self.sharedURL];
        }
    }
    - (void)saveSharedFile:(NSURL *)url {
        MBProgressHUD *hud = [MBProgressHUD showButtonHUDAddedTo:self.view animated:YES];
        DKFile *file = [[DKFile alloc] init];
        file.fullPath = url.path;
        file.fileName = url.path.lastPathComponent;
        [[DKFileManager sharedInstance] copyItemsOfSelectFiles:@[file] fromStorage:DKFileStorageTypeInternal toStorage:DKFileStorageTypeInternal toPath:[DKFileManager defaultPath:kShareDirectory storage:DKFileStorageTypeInternal] progressHUD:hud complete:^{
            [SVProgressHUD showSuccessWithStatus:@"已保存到 iPhone -> SharedFiles"];
        } failure:^(NSError *errors) {
            
        }];
    }
    

    相关文章

      网友评论

        本文标题:给 APP添加外部文件导入功能

        本文链接:https://www.haomeiwen.com/subject/hrqtcxtx.html