0

如何检查特定应用程序是否已安装在 iPhone 设备上?我们怎样才能实现这个任何想法?

4

4 回答 4

1

canOpenURL本质上是检查注册到该特定 URL 方案的应用程序是否已安装,或者换句话说,该应用程序是否存在,如果存在,我们可以打开 URL。

- (BOOL) appExists: (NSURL*)url{
    if ([[UIApplication sharedApplication] canOpenURL:url]) {        
        return YES;

    } else {
        return NO;
    }
}


NSURL *urlApp = [NSURL URLWithString:@"fb://profile/73728918115"];// facebook app

NSURL *urlApp = [NSURL URLWithString: [NSString stringWithFormat:@"%@", @"twitter:///user?screen_name=INNOVA_ET_BELLA"]];//tweeter app

if ([self appExists:urlApp]) {
        [[UIApplication sharedApplication] openURL:urlApp];
} 

iPhone URL 方案:

http://wiki.akosma.com/IPhone_URL_Schemes

自定义 URL 方案:

http://mobiledevelopertips.com/cocoa/launching-your-own-application-via-a-custom-url-scheme.html
于 2012-07-31T09:17:16.630 回答
0

使用下面的代码,您可以检索所有应用程序的列表。

 NSString *bundleRoot = [[NSBundle mainBundle] bundlePath];
 NSString *sandBoxPath = [bundleRoot stringByDeletingLastPathComponent];
 NSString *appFolderPath = [sandBoxPath stringByDeletingLastPathComponent];

 NSFileManager *fm = [NSFileManager defaultManager];
 NSArray *dirContents = [fm contentsOfDirectoryAtPath:appFolderPath error:nil];

 NSMutableArray *appNames = [[NSMutableArray alloc]init];
 for(NSString *application in dirContents)
 {
      NSString *appPath = [appFolderPath stringByAppendingPathComponent:application];
      NSArray *appcontents = [fm contentsOfDirectoryAtPath:appPath error:nil];
      NSPredicate *fltr = [NSPredicate predicateWithFormat:@"self ENDSWITH '.app'"];
      NSArray *onlyApps = [appcontents filteredArrayUsingPredicate:fltr];
      if(onlyApps.count > 0)
           [appNames addObject:[onlyApps objectAtIndex:0]];
 }

 NSLog(@"%@", [appNames description]);
 [appNames release];
于 2012-07-31T09:26:08.270 回答
0

如果应用程序有注册的 URL,您可以通过这种方式检查是否存在

[[UIApplication sharedApplication] canOpenURL:url]

URL 类似于skype://

如果没有,您需要循环访问所有文件夹。
此处如何:使用 glob 获取目录中的文件列表

NSString *bundleRoot = [[NSBundle mainBundle] bundlePath];
NSFileManager *fm = [NSFileManager defaultManager];
NSArray *dirContents = [fm contentsOfDirectoryAtPath:bundleRoot error:nil];
NSPredicate *fltr = [NSPredicate predicateWithFormat:@"self ENDSWITH '.app'"];
NSArray *onlyAPPs = [dirContents filteredArrayUsingPredicate:fltr];

应用程序位于/var/application/APPNAME.app(如果我没记错的话)。

于 2012-07-31T09:32:22.837 回答
0

这是一个测试是否安装了 facebook 应用程序的示例。

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fb://"]]) {
// Facebook app is installed
 }
于 2013-01-24T04:30:49.873 回答