iOS, 在應用之間共用文檔。

來源:互聯網
上載者:User

在iOS開發中,在很多情況下我們需要完成應用之間的文檔共用。然而,iOS為應用提供的是一個運行沙箱,一個應用程式無法直接和另一個應用程式通訊,所以應用之間如果要共用文檔的話需要通過一些系統提供的應用互動手段。


 iOS應用程式之間互動的一個簡單手段是“URL Scheme”,就是通過UIApplication的openURL方法,使用“<應用程式名稱>://”這樣的URL形式指定應用,同時可以在URL中加入一些類似於http的get請求的參數,用於傳遞簡單資料,代碼範例如下:


  [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"myapp://test_page/one?token=12345&user=ABC" ]];

 

 以上代碼會啟動應用“myapp”,然後傳遞參數token和user給應用myapp。
 不過這種應用調用無法完成應用間文檔共用,這能完成一些簡單的資料傳遞。有關“URL Scheme”的具體使用可以參考iOS官方範例中的LaunchMe。


 為了給其它應用程式共用文檔,發起共用的應用一般使用的是UIDocumentInteractionController類,通過調用該類執行個體的presentOpenInMenuFromRect方法顯示一個“OpenIn”菜單,該菜單中會顯示系統中聲明可以支援你所共用的文檔的應用表徵圖,由使用者選擇使用那個應用開啟你共用的應用。


 下面是一段代碼範例,該範例通過UIDocumentInteractionController的interactionControllerWithURL方法建立了一個UIDocumentInteractionController執行個體,然後調用該執行個體的presentOpenInMenuFromRect方法顯示“OpenIn”菜單。


NSString *filePath =

    [[NSBundle mainBundle]

     pathForResource:@"PDF Document" ofType:@"pdf"];

   
    NSLog(@"file path is: %@", filePath);

   
   
    self.documentController =

    [UIDocumentInteractionController

     interactionControllerWithURL:[NSURL fileURLWithPath:filePath]];

    self.documentController.delegate = self;

  
    self.documentController.UTI = @"com.adobe.pdf";

    [self.documentController presentOpenInMenuFromRect:CGRectZero

                                           inView:self.view

                                         animated:YES];

 將以上代碼放置到一個控制項對應的action方法中,觸發該控制項就會讓系統彈出“OpenIn”菜單,有使用者選者使用什麼程式開啟你所共用的應用。
 注意,在“OpenIn”菜單中會出現所有聲稱支援對應文件類型的應用,比如上例中的“OpenIn”菜單中會出現所有“聲稱”支援pdf格式的應用表徵圖,至於使用者選擇哪個應用,所選擇的應用是否真的可以正常處理pdf文檔是我們無法控制的。

 


 為了使用其它應用程式共用的文檔,接受文檔的應用需要完成兩個工作。
 第一個工作是在應用的Info.plist中加入聲明,聲明該程式支援什麼文檔格式。比如你需要支援pdf文檔,就可以在你的應用項目配置介面選擇“Info”頁面的“Document types”區段,在裡面加入pdf文件類型的配置,如:

 

 

 


 第二個工作是接受其它程式共用的資料,正常做法是在應用的openURL方法中加入響應代碼,在該代碼中去訪問參數URL中紀錄的文檔,該URL指向本應用Documents目錄中的inbox目錄中的一個檔案,該檔案就是其它程式共用的文檔的一個拷貝。具體代碼如下:

 


- (BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

 

{

    NSLog(@"openURL method was called");

   
    NSLog(@"the source application is: %@", sourceApplication);

   
   
    NSLog(@"url is: %@", url);

   
    NSLog(@"handle the file in above file path for the shared doc");

   
   
    return YES;

}

 

 以上openURL方法通過控制台列印了列印了共用文檔的應用程式名稱和所共用的文檔在本應用中的訪問路徑,通過這個訪問路徑開發人員可以在本應用中訪問到其它應用所共用的文檔。

 

 


 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.