1. 程式人生 > >iOS App讓自己的應用在其他應用中開啟列表中顯示、iOS把自己的應用新增到”活動“、將PDF檔案Open In MyApp

iOS App讓自己的應用在其他應用中開啟列表中顯示、iOS把自己的應用新增到”活動“、將PDF檔案Open In MyApp

像百度網盤等應用,裡面的檔案開啟時,都可以通過以下應用再開啟檔案。下面紅色框框內的我的jpg就是我做的一個例子。因為例子沒有提供Icon,所以顯示的是預設icon。

下面就是這例子的主要步驟和程式碼。

例子是一個開啟jpg圖片程式。

1、在專案的**info.plist檔案中新增:

  1. <key>CFBundleDocumentTypes</key>
  2.     <array>
  3.         <dict>
  4.             <key>CFBundleTypeIconFiles</key>
  5.             <
    array>
  6.                 <string>[email protected]</string>
  7.                 <string>icon.png</string>
  8.             </array>
  9.             <key>CFBundleTypeName</key>
  10.             <string>Molecules Structure File</string>
  11.             <key>CFBundleTypeRole
    </key>
  12.             <string>Viewer</string>
  13.             <key>LSHandlerRank</key>
  14.             <string>Owner</string>
  15.             <key>LSItemContentTypes</key>
  16.             <array>
  17.                 <string>com.fzrong.jpg</string>
  18.                 <
    string>org.gnu.gnu-zip-archive</string>
  19.             </array>
  20.         </dict>
  21.     </array>
  22.     <key>UTExportedTypeDeclarations</key>
  23.     <array>
  24.         <dict>
  25.             <key>UTTypeConformsTo</key>
  26.             <array>
  27.                 <string>public.plain-text</string>
  28.                 <string>public.text</string>
  29.             </array>
  30.             <key>UTTypeDescription</key>
  31.             <string>Molecules Structure File</string>
  32.             <key>UTTypeIdentifier</key>
  33.             <string>com.fzrong.jpg</string>
  34.             <key>UTTypeTagSpecification</key>
  35.             <dict>
  36.                 <key>public.filename-extension</key>
  37.                 <string>jpg</string>
  38.                 <key>public.mime-type</key>
  39.                 <string>image/jpg</string>
  40.             </dict>
  41.         </dict>
  42.     </array>
這就是告訴系統,你能開啟 jpg這個檔案型別。

2、開啟到自己的app時,要擷取到過來資源的檔案路徑:

在Appdelegate裡新增程式碼如下:

  1. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation  
  2. {  
  3.     if (url != nil) {  
  4.         NSString *path = [url absoluteString];  
  5.         NSMutableString *string = [[NSMutableString alloc] initWithString:path];  
  6.         if ([path hasPrefix:@"file://"]) {  
  7.             [string replaceOccurrencesOfString:@"file://" withString:@"" options:NSCaseInsensitiveSearch  range:NSMakeRange(0, path.length)];  
  8.         }  
  9.         [self.viewController openPng:string];  
  10.     }  
  11.     returnYES;  
  12. }  

要去掉file://檔案路徑的頭,要不然找不到資源。

3、在自己的ViewController裡開啟jgp顯示:

  1. - (void)openPng:(NSString*)string  
  2. {  
  3.     UIImage *image = [[UIImage alloc] initWithContentsOfFile:string];  
  4.     float width = image.size.width;  
  5.     float height = image.size.height;  
  6.     if (width > 320) {  
  7.         height = (height/width) * 300;  
  8.         width = 300;  
  9.     }  
  10.     CGRect frame = CGRectMake(020, width, height);  
  11.     imageView.frame = frame;  
  12.     imageView.image = image;  
  13. }  

開啟之後的效果是這樣的:


注意:這都是在真機上演示的。

這裡例子咱們可以擴充套件,怎麼開啟網盤裡的gif圖片啊,還有其他自己自定義的格式也可以。

專案完整程式碼已經上傳到:http://download.csdn.net/detail/totogo2010/7460929

參考:

https://developer.apple.com/library/ios/qa/qa1587/_index.html 

http://stackoverflow.com/questions/20869815/open-file-from-local-file-system-with-default-application-ios

寫了一個很好的PDF閱讀軟體,那麼怎麼讓使用者根據提示開啟我們的應用瀏覽閱讀,提高程式的使用率呢?本文就是針對這個問題而來,方法:修改-Info.plist檔案。

1.在plist檔案中新增一個URLTypes欄位,該欄位指定程式的對外介面:



其中CFBundleTypeExtensions指定檔案型別,例如pdf,doc,這個是不能隨便填的。

CFBundleTypeIconFiles指定用UIActionSheet向用戶提示開啟應用時顯示的圖示。

DocumentTypeName可以自定,對應檔案型別名。

Document Content Type UTIs指定官方指定的檔案型別,UTIs即Uniform Type Identifiers。

如果要關聯多個檔案型別可以在Document Types中設定多個Item,這裡我設定的關聯型別包括pdf,doc,ppt。

接下來上程式碼。

AppDelegate類的程式碼:

  1. //- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
  2. //    return YES;
  3. //}
  4. -(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {  
  5.     if (url && [url isFileURL]) {  
  6.         DocumentViewController *documentViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateInitialViewController];  
  7.         [documentViewController handleDocumentOpenURL:url];  
  8.         returnYES;  
  9.     }  
  10.     returnNO;  
  11. }  


其中handleOpenURL確定是否處理外部程式的呼叫請求,後者則是開啟檔案的URL。

再看看Doc