iOS App讓自己的應用在其他應用中開啟列表中顯示、iOS把自己的應用新增到”活動“、將PDF檔案Open In MyApp
像百度網盤等應用,裡面的檔案開啟時,都可以通過以下應用再開啟檔案。下面紅色框框內的我的jpg就是我做的一個例子。因為例子沒有提供Icon,所以顯示的是預設icon。
下面就是這例子的主要步驟和程式碼。
例子是一個開啟jpg圖片程式。
1、在專案的**info.plist檔案中新增:
- <key>CFBundleDocumentTypes</key>
- <array>
- <dict>
- <key>CFBundleTypeIconFiles</key>
-
<
- <string>[email protected]</string>
- <string>icon.png</string>
- </array>
- <key>CFBundleTypeName</key>
- <string>Molecules Structure File</string>
-
<key>CFBundleTypeRole
- <string>Viewer</string>
- <key>LSHandlerRank</key>
- <string>Owner</string>
- <key>LSItemContentTypes</key>
- <array>
- <string>com.fzrong.jpg</string>
-
<
- </array>
- </dict>
- </array>
- <key>UTExportedTypeDeclarations</key>
- <array>
- <dict>
- <key>UTTypeConformsTo</key>
- <array>
- <string>public.plain-text</string>
- <string>public.text</string>
- </array>
- <key>UTTypeDescription</key>
- <string>Molecules Structure File</string>
- <key>UTTypeIdentifier</key>
- <string>com.fzrong.jpg</string>
- <key>UTTypeTagSpecification</key>
- <dict>
- <key>public.filename-extension</key>
- <string>jpg</string>
- <key>public.mime-type</key>
- <string>image/jpg</string>
- </dict>
- </dict>
- </array>
2、開啟到自己的app時,要擷取到過來資源的檔案路徑:
在Appdelegate裡新增程式碼如下:
- - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
- {
- if (url != nil) {
- NSString *path = [url absoluteString];
- NSMutableString *string = [[NSMutableString alloc] initWithString:path];
- if ([path hasPrefix:@"file://"]) {
- [string replaceOccurrencesOfString:@"file://" withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, path.length)];
- }
- [self.viewController openPng:string];
- }
- returnYES;
- }
要去掉file://檔案路徑的頭,要不然找不到資源。
3、在自己的ViewController裡開啟jgp顯示:
- - (void)openPng:(NSString*)string
- {
- UIImage *image = [[UIImage alloc] initWithContentsOfFile:string];
- float width = image.size.width;
- float height = image.size.height;
- if (width > 320) {
- height = (height/width) * 300;
- width = 300;
- }
- CGRect frame = CGRectMake(0, 20, width, height);
- imageView.frame = frame;
- imageView.image = image;
- }
開啟之後的效果是這樣的:
注意:這都是在真機上演示的。
這裡例子咱們可以擴充套件,怎麼開啟網盤裡的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類的程式碼:
- //- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
- // return YES;
- //}
- -(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
- if (url && [url isFileURL]) {
- DocumentViewController *documentViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateInitialViewController];
- [documentViewController handleDocumentOpenURL:url];
- returnYES;
- }
- returnNO;
- }
其中handleOpenURL確定是否處理外部程式的呼叫請求,後者則是開啟檔案的URL。
再看看Doc