iOS Developer

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

2017-06-21  本文已影响394人  Arclin

意思就是在其他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) {
        
    }];
}
上一篇下一篇

猜你喜欢

热点阅读