转载:APP a打开b软件的附件

Importing & Exporting Documents in iOS

Posted by weimenglee - 09 Aug 2011

https://mobiforge.com/design-development/importing-exporting-documents-ios

See also...

One of the common tasks that an iOS developer has to do is to import or export documents from his iOS application. For example, suppose you are developing a document reader and you want to allow the user to import documents into your application so that it can be read offline. Also, your reader might also support the exporting of documents so that other applications can make use of the document.

In this article, I will walk you through the different techniques you can employ to allow documents to be imported or exported from your iOS application.

Creating the Project

As usual, I will be using an example to illustrate the various techniques discussed in this article. Using Xcode, create a new View-based Application (iPhone) project and name it OfflineReader.

Double-click on the OfflineReaderViewController.xib to open it in Interface Builder and populate it with the following views (see Figure 1):

    • WebView
    • Round Rect Button


      Figure 1. Populating the View window

      In the Attributes Inspector window for the WebView, ensure that you check the “Scales Page to Fit” item.

      In the OfflineReaderViewController.xib file, add in the following statements in bold:

      #import <UIKit/UIKit.h>
       
      @interface OfflineReaderViewController : UIViewController
          <UIDocumentInteractionControllerDelegate> {
          IBOutlet UIWebView *webView;
      }
       
      -(void)openDocumentIn;
      -(void)handleDocumentOpenURL:(NSURL *)url;
      -(void)displayAlert:(NSString *) str;
      -(void)loadFileFromDocumentsFolder:(NSString *) filename;
      -(void)listFilesFromDocumentsFolder;
       
      - (IBAction) btnDisplayFiles;
       
      @end

      Back in Interface Builder, connect the outlet and action to the WebView and Button views. Right-clicking on the File’s Owner in the OfflineReaderViewController.xib window should now reveal the connections as shown in Figure 2.


      Figure 2. Confirmation the connections of the action and outlet

      Drag and drop two files into the Resources folder of the project (see
      Figure 3). In this example, I have a PDF file named “Courses for Q2
      2011.pdf” and an image file named icon.jpg.


      Figure 3. Adding two files to the Resources folder of the project

      In the OfflineReader-Info.plist file, set the “Icon file” key to “icon.jpg”.

      So now you have an iPhone application with the icon set. It also has a PDF document in the Resources folder.

      Exporting Documents

      The first thing you will learn is how to export a document from your
      application. For example, in the Mail application on your iPhone, when
      you received a PDF file, you can either tap on the icon (see Figure 4)
      to view the document within the Mail application, or tap and hold onto
      the icon.


      Figure 4. A PDF document in Mail

      If you do the latter, an action sheet would be displayed (see Figure
      5). You can tap on the “Open in...” button to see a list of applications
      that your document can be exported to.


      Figure 5. Viewing your application in an external application

      In my case, it will display the list as shown in Figure 6.


      Figure 6. A list of applications able to handle your document

      So let’s now modify our application so that we can export the PDF document in the Resources project to an external application.

      First, declare a variable of type UIDocumentInteractionController in the OfflineReaderViewController.m file:

      #import "OfflineReaderViewController.h"
       
      @implementation OfflineReaderViewController
       
      UIDocumentInteractionController *documentController;

      The UIDocumentInteractionController class provides in-app support for providing user interaction with files in your application. In this example, you will use it to export a document to an external application.

      Next, define the following methods:

      -(void)openDocumentIn {
          NSString * filePath =
              [[NSBundle mainBundle]
              pathForResource:@"Courses for Q2 2011" ofType:@"pdf"];
          documentController =
              [UIDocumentInteractionController
                  interactionControllerWithURL:[NSURL fileURLWithPath:filePath]];
          documentController.delegate = self;
          [documentController retain];
          documentController.UTI = @"com.adobe.pdf";
          [documentController presentOpenInMenuFromRect:CGRectZero
                                                         inView:self.view
                                                       animated:YES];
      }
       
      -(void)documentInteractionController:(UIDocumentInteractionController *)controller
               willBeginSendingToApplication:(NSString *)application {
       
      }
       
      -(void)documentInteractionController:(UIDocumentInteractionController *)controller
                   didEndSendingToApplication:(NSString *)application {
       
      }
       
      -(void)documentInteractionControllerDidDismissOpenInMenu:
      (UIDocumentInteractionController *)controller {
       
      }

      The openDocumentIn method basically creates the path to point to the PDF document (that you want to export) and then uses it to feed into the documentController object. You need to set the UTI (Uniform Type Identifiers) for the documentController object so that it can help the system find the appropriate application to open your document. In this case, it is set to “com.adobe.pdf”, which represents a PDF document. Other common UTIs are "com.apple.quicktime-movie" (QuickTime movies), "public.html" (HTML documents), and "public.jpeg" (JPEG files).

      The other three methods are the methods defined in the UIDocumentInteractionControllerDelegate protocol. They are fired when the documentController object is being invoked. For this example, you don’t really need to code anything within these methods.

      Finally, in the viewDidLoad method, add the following statement:

      - (void)viewDidLoad {
          [super viewDidLoad];
          [self openDocumentIn];
      }

      Press Command-R to test the application on a real device (the Simulator won‘t work in this case). When the View window is loaded, you will see an action sheet displaying the list of applications that you can export your document to (see Figure 7).


      Figure 7. Exporting our PDF document to an external application

      If you select iBooks, the PDF document will appear in iBooks (see Figure 8).


      Figure 8. iBooks showing our PDF document

      File Sharing

      The previous section showed how you can export a document to an
      external application. What about the other way round – importing a
      document into your application? In iOS, there are two ways to get files
      into your application:

      • File Sharing through iTunes
      • Through exchanges between applications (like the one you just saw in the previous section)

      Let’s discuss the first method first. The first method presents a
      very easy and direct way for users to transfer large number of files
      into or out of an application. In the OfflineReader-Info.plist file, add
      a new key named UIFileSharingEnabled and check it (see Figure 9).


      Figure 9. Adding a new key to enable file sharing for your application

      Press Command-R to redeploy the application onto the real device
      again. Launch iTunes and select the device name, followed by the Apps
      tab. Figure 10 shows that the OfflineReader application now appears
      under the File Sharing section.


      Figure 10. The application is now listed under the File Sharing section of iTunes

      To copy a file into the application, simply drag and drop it into the
      rectangle labeled OfflineReader Documents. Figure 11 shows that I have
      copied a PDF document into the application. All documents copied will
      reside in the Documents folder of your application.


      Figure 11. Copying a document into the application

      If you want to extract the files from the application and save it
      locally onto your computer, select the file(s) and click the Save to…
      button.

      Now, to prove that the files are really copied into the Documents
      folder of your application, add the following code to the
      OfflineReaderViewController.m file:

      -(void) displayAlert:(NSString *) str {
          UIAlertView *alert =
              [[UIAlertView alloc] initWithTitle:@"Alert"
                                         message:str
                                        delegate:self
                               cancelButtonTitle:@"OK"
                               otherButtonTitles:nil];
          [alert show];
          [alert release];
      }
       
      - (void)handleDocumentOpenURL:(NSURL *)url {
          NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
          [webView setUserInteractionEnabled:YES];
          [webView loadRequest:requestObj];
      }
       
      -(void)loadFileFromDocumentsFolder:(NSString *) filename {
          //---get the path of the Documents folder---
          NSArray *paths = NSSearchPathForDirectoriesInDomains(
              NSDocumentDirectory, NSUserDomainMask, YES);
          NSString *documentsDirectory = [paths objectAtIndex:0];
          NSString *filePath = [documentsDirectory
              stringByAppendingPathComponent:filename];
          NSURL *fileUrl = [NSURL fileURLWithPath:filePath];
          [self handleDocumentOpenURL:fileUrl];
      }
       
      -(void)listFilesFromDocumentsFolder {
          //---get the path of the Documents folder---
          NSArray *paths = NSSearchPathForDirectoriesInDomains(
          NSDocumentDirectory, NSUserDomainMask, YES);
          NSString *documentsDirectory = [paths objectAtIndex:0];
       
          NSFileManager *manager = [NSFileManager defaultManager];
          NSArray *fileList =
              [manager contentsOfDirectoryAtPath:documentsDirectory error:nil];
          NSMutableString *filesStr =
              [NSMutableString stringWithString:@"Files in Documents folder \n"];
          for (NSString *s in fileList){
              [filesStr appendFormat:@"%@ \n", s];
          }
          [self displayAlert:filesStr];
          [self loadFileFromDocumentsFolder:@"0470918020.pdf"];
      }
       
      - (IBAction) btnDisplayFiles {
          [self listFilesFromDocumentsFolder];
      }

      Here, the displayAlert: method is simply a helper method to display an Alert View on the screen. The handleDocumentOpenURL: method takes in a NSURL object and loads the WebView with its content. The loadFileFromDocumentsFolder: method takes in a filename and converts its path into a NSURL object. The listFilesFromDocumentsFolder method displays all the files and folders contained within the Documents folder of the application. Here, I have hardcoded it to display the PDF document named “0470918020.pdf” (which is what I have copied earlier).

      Press Command-R to deploy the application on the device again. Tapping the Display files in Documents button will display the filename and at the same time load the PDF document in the WebView (see Figure 12), proving that the file was transferred into the application successfully.


      Figure 12. Displaying the files in the Documents folder and loading the PDF document

      Importing Documents

      The second method to transfer documents into an application is
      through another application (as seen in the first section of this
      article). In the beginning of this article, you saw how a PDF document
      in your application can be transferred to the iBooks application for
      viewing. This time round, you will learn how a document can be
      transferred into your own application.

      For a start, you shall modify the application to accept PDF
      documents. What you need to do is to get your application to register
      with the iOS that it is able to accept PDF document. To do this, you
      need to modify the OfflineReader-Info.plist file.

      Add the new CFBundleDocumentTypes key as shown in Figure 13.


      Figure 13. Add a new key to support PDF documents

      Note the following:

      • The CFBundleDocumentTypes key is of type Array. It contains an array
        of dictionaries describing the types of documents supported by your
        application.
      • Item 0 is of type Dictionary.
      • The CFBundleTypeName key specifies the abstract name for the specified document type.
      • The LSHandlerRank key specifies whether the application is the owner
        (creator of this file type), Alternate (secondary viewer of this file
        type), None, or Default.
      • The CFBundleTypeRole key specifies the application’s role with respect to the type - Editor, Viewer, Shell, or None.
      • The LSItemContentTypes key is of type Array. It contains an array of UTIs specifying the file type.

      The above entry in the OfflineReader-Info.plist file will register
      with iOS that the application is capable of handling PDF documents.

      When a PDF document is passed into the application, the application
      will fire a particular method –
      application:openURL:sourceApplication:annotation:. This method must be
      implemented in the application delegate.

      Hence, add the following in the OfflineReaderAppDelegate.m file:

      #import "OfflineReaderAppDelegate.h"
      #import "OfflineReaderViewController.h"
       
      @implementation OfflineReaderAppDelegate
       
      @synthesize window;
      @synthesize viewController;
       
      -(BOOL)application:(UIApplication *)application
                 openURL:(NSURL *)url
       sourceApplication:(NSString *)sourceApplication
              annotation:(id)annotation {
          if (url != nil && [url isFileURL]) {
              [self.viewController handleDocumentOpenURL:url];
          }
          return YES;
      }

      When a document is passed into your application, it will be copied into a folder called Inbox, located within the Documents folder. The url argument contains the path to the document in the Inbox folder. In the above, once the document is passed in, you will call the handleDocumentOpenURL: method defined in the OfflineReaderViewController class to load the document in the WebView.

      To see the URL of an imported document, add the following statement to the handleDocumentOpenURL: method:

      - (void)handleDocumentOpenURL:(NSURL *)url {
          [self displayAlert:[url absoluteString]];
          NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
          [webView setUserInteractionEnabled:YES];
          [webView loadRequest:requestObj];
      }

      Press Command-R to deploy the application onto the real device again. This time, if you go back to the same email containing the PDF document and tap and hold on to it, you will find that you have the option to open the document in the OfflineReader application (see Figure 14).


      Figure 14. Your application is capable of handling PDF document

      When the document is opened in OfflineReader, you will see the path of the document as shown in Figure 15.


      Figure 15. Confirming the path of the document in the Documents/Inbox folder

      Importing Self-Defined Documents

      The previous section showed how to import well-known document
      types, such as PDF. What happens if you want to import your own
      self-defined document types? For example, you are writing a Sudoku game
      and wanted to implement your own file format for saving the state of a
      Sudoku game. In this case, your file might have the .sdk extension,
      which is only used by your application.

      To ensure that your application can handle files with the .sdk
      extension, you will add the keys as shown in Figure 16 to the
      OfflineReader-Info.plist file.


      Figure 16. Adding new keys to support self-defined document types

      Note that you added another key to the CFBundleDocumentTypes array.
      You set the LSItemContentTypes to a unique value, using the reverse
      domain name of your company and the type you are defining. Since this is
      a self-defined content type, you have to define it using the
      UTExportedTypeDeclarations key.

      Note: For more information on UTI, refer to Apple’s documentations – “Introduction to Uniform Type Identifiers Overview”.

      Press Command-R to test the application on a real device again. This
      time round, if your email contains a document of extension .sdk, you
      will see the icon of your application displayed next to the document
      name (see Figure 17). When you tap on the document name, you will see a
      list of options to open your documents with.


      Figure 17. Opening a file of type .sdk

      Summary

      In this article, you have seen the different techniques for handling
      documents in your application. With this knowledge, you will be able to
      write cool iOS applications that allows them to interact with the
      outside world!

时间: 2024-10-05 15:49:23

转载:APP a打开b软件的附件的相关文章

outlook打开某些带了附件和表格的邮件会重启软件?

outlook打开某些带了附件和表格的邮件会出现如下的提示框,点了确定后,outlook就会自动重启了. 解决办法很简单: 新建一个新的pst文件即可,建议一个pst不要存太大的数据.每隔一段时间建一个pst.

双击一次,打开万千软件

看到标题,您想到了什么呢,是批处理,yes,您答对了,想到别的,那咱就交流下 我跟GF说,批处理可以一次性打开很多软件,她就心动了,然后就要我写给她 .bat文件内容是酱紫的: @echo off echo 主人,我正在努力打开软件,请稍等...... start C:\Progra~1\2345Soft\HaoZip\HaoZip.exe start C:\Progra~2\Aboboo\aboboo.exe start C:\foxmail\Foxmail.exe start C:\Prog

【JS】点击页面判断是否安装app并打开,否则跳转下载的方法

应用场景 App产品在运营推广上有一个需求,就是要求可以让用户在访问我们的推广网页时,就可以判断出这个用户手机上是否安装了我们的App,如果安装了则可以直接在网页上打开,否则就引导用户前往下载.从而形成一个推广上的闭环. 解决办法 而对于点击链接后,能否直接打开,可以通过下面的代码来实现.前提条件:你得知道你的APP对应的打开协议,如贴吧APP,协议为:com.baidu.tieba:// ,微信的:weixin:// ,等等 1 <!-- a标签点击打开的动作,在click事件中注册 -->

[转载] linux下打开windows txt文件中文乱码问题

原文链接 在linux操作系统下,我们有时打开在windows下的txt文件,发现在windows下能正常显示的txt文件出现了中文乱码. 出现这种情况的原因为两种操作系统的中文压缩方式不同,在windows环境中中文压缩一般为gbk,而在linux环境中为utf8,这就导致了在windows下能正常显示 txt文件在linux环境下打开呈现了乱码状态. 解决方法:在linux用iconv命令,如乱码文件名为shujujiegou.txt,那么在终端输入如下命令: iconv -f gbk -t

精选速购APP源码开发软件

淘宝用了10年的时间,才发展了不到1000万个卖家,微商仅仅用了一年,就有了超过1000万的卖家,同时微信用户早已经超过5亿人,开通微信支付的已有8000万. 面对发展如此迅猛的微商市场,在2016年将有什么变化呢? 精选速购介绍:精选速购是中国创新的电子商务平台,创办于2011年5月4日,旨在打造大型精品B2C和o2o综合商城,同时为更多人提供互联网创业机会.每一个精选速购分销商,都是精选速购的"老板",他们负责经营自己在精选速购的网上店铺和来自全球采购的精品百货.精选速购商城主要投

在app中打开appStore中其他app

1 var str = "https://itunes.apple.com/cn/app/zhang-jiange-hao-tou-zi-ke/id402382976?mt=8"//这个链接是app在itunes中的地址 2 if UIApplication.sharedApplication().canOpenURL(NSURL(string: str)!){ 3 UIApplication.sharedApplication().openURL(NSURL(string: str

html5页面js判断是否安装app,以及判断是否在app内部打开html5页面

一.html5页面js判断是否安装app 目前还不能通过浏览器直接判断是否安装app 通过谷歌参考别人的方式和测试 我们知道安装了某个app后通过scheme跳转协议(引荐:http://www.jianshu.com/p/eed01a661186)进入到app 没有安装时点击链接是无效的 所以通过点击链接后到执行进入app之间的时间差来判断是否安装app 1.下面只是处理了安卓系统时 if (navigator.userAgent.match(/android/i) ){ var nowTim

Android App 第一次打开时的引导界面

Android App 第一次打开时的引导界面,这个需求是非常多的.在写新项目的时候,刚好要用到,在网上找了一下 demo,没发现非满意的.所以只好自己动手写一个,分享一下,避免以后大家重复造轮子.效果图如下(虽然有点丑) 上面这个就是引导界面 GuideActivity 的界面了,实现思路很简单:主界面用 FrameLayout 布局,后面用 ViewPager 装载图片.下面几个小点指示当前滑动到哪个界面了,因为没现在的控制可用,所以自定义了一个 InidcatorView,布局文件如下 <

前端判断是否APP客户端打开触屏,实现跳转APP原生组件交互之遐想

今天做了一个html的活动页面,本来马上就要完工,准备开开心心收尾,结果~... 产品突然提出需要说,要讲html中的某些交互和APP原生组件挂钩,心里一万头xxx奔过~ 静下心来思考 以往我们是判断是否客户端打开都依赖于后端,通过app主动拼接参数的方式,传递给后端,后端告诉前端本次的加载是在app里还是app外,实现页面的特殊功能 那我们发现,这个方式环节和局限性太多,我们无法保证客户端一定能够每个触屏页面都拼接我们需要的参数,而且我们的触屏页面有很多种,有的是活动需要的,有的是动态,有的是