在调用 presentOpenInMenuFromRect 之前检查它是不是存在可以打开文件的应用程序

Posted

技术标签:

【中文标题】在调用 presentOpenInMenuFromRect 之前检查它是不是存在可以打开文件的应用程序【英文标题】:Check if it exists an app that can open a file before calling presentOpenInMenuFromRect在调用 presentOpenInMenuFromRect 之前检查它是否存在可以打开文件的应用程序 【发布时间】:2011-08-23 10:43:48 【问题描述】:

我在“documents”目录中存储了一个文件 (pdf),我想知道如何检测移动设备中是否安装了可以打开该文件的应用程序(应用程序)(例如, “pdf”文件可以使用“iBooks”、“DropBox”...)打开。我想在调用方法“presentOpenInMenuFromRect”之前检测到这一点;它显示了可以处理特定文件的可能应用程序的列表。期望的行为是:

1) 给定一个存储在“Document”目录中的 pdf,检查 iPhone/iPad 中是否安装了可以打开该文件的“app”(iBooks、DropBox、...)。这是我不知道该怎么做的。

2) 如果 iPhone/iPad 中没有应用程序可以打开该应用程序,则什么也不做,否则绘制一个“保存”按钮,然后,如果用户按下此“保存”按钮,则“presentOpenInMenuFromRect”方法将是调用以显示可以打开该文件的可能应用程序列表。我知道如何显示可以打开文件的应用程序列表;以下是源代码:

“保存”按钮相关的源码为:

- (void) saveFile:(UIWebView*)webView 

    NSString* fileName  = [[NSFileManager defaultManager]  displayNameAtPath:webView.request.URL.absoluteString];
    #if DEBUG
    NSLog(@"<%p %@: %s line:%d> File name:%@", self, [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __PRETTY_FUNCTION__, __LINE__, fileName);
    #endif
    NSURL* fileurl = [NSURL URLWithString:webView.request.URL.absoluteString];
    NSData* data = [NSData dataWithContentsOfURL:fileurl];
    NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString* docsDirectory = [paths objectAtIndex:0];
    NSString* filePath = [docsDirectory stringByAppendingPathComponent:fileName];
    [data writeToFile:filePath atomically:YES];
    NSURL* url = [NSURL fileURLWithPath:filePath];
    //UIDocInteractionController API gets the list of devices that support the file type
    docController = [UIDocumentInteractionController interactionControllerWithURL:url];
    [docController retain]; //Very important, if "retain" is not called, the application crashes
    //Present a drop down list of the apps that support the file type,
    //clicking on an item in the list will open that app while passing in the file.
    BOOL isValid = [docController presentOpenInMenuFromRect:CGRectZero inView:webView animated:YES]; //Using "webView" instead of "self.view"
    if (!isValid)
     
        [self showAlertSaveFileError:fileName]; //Shows an alert message
    

提前致谢。

注意:调用“presentOpenInMenuFromRect”方法的响应时间大约是几秒钟,所以这就是为什么我想知道是否有另一种方法可以检测并获取移动设备上可能安装的应用程序列表可以打开特定文件(pdf,...)的设备

【问题讨论】:

【参考方案1】:

查看 ihasapp。

http://www.ihasapp.com/ 它说它是一个 ios 框架,可让开发人员检测当前安装在用户设备上的应用程序。

【讨论】:

iHasApp 网站说它不再符合 AppStore 标准并且已经停止。

以上是关于在调用 presentOpenInMenuFromRect 之前检查它是不是存在可以打开文件的应用程序的主要内容,如果未能解决你的问题,请参考以下文章

在 foreach 中调用类仅最后一次调用有效

在 JSX 中调用 javascript 函数:为啥在没有 () 的情况下调用函数?

c语言中,在一个自定义函数里面只能调用一个自定义函数吗?可以调用多个吗?如果可以怎么调用?

为啥 C# 编译器会在最后一个方法调用是条件调用时删除一串方法调用?

选项在 REST API 调用之前调用元

C中怎样在1个窗体中调用调用另外一个窗体中的方法!