我想检测何时安装/卸载了另一个应用程序,并在执行时将时间保存到数据库中。
我知道在Android中使用broadcastreceiver这是可能的,我想知道这是否可以在iOS中使用jailBroken设备完成,因为我相信这在非jailBroken设备中是不可能的。
我希望有人可以帮助我。谢谢。
答案 0 :(得分:2)
最近遇到了同样的问题。
您需要编写SpringBoard调整。您可以在其中观察来自本地通知中心(SBInstalledApplicationsDidChangeNotification
或CFNotificationCenterGetLocalCenter
)的通知[NSNotificationCenter defaultCenter]
。用户信息字典将包含:
SBInstalledApplicationsRemovedBundleIDs
密钥包含已卸载应用程序的软件包ID数组。SBInstalledApplicationsModifiedBundleIDs
键包含已更新应用程序的包ID数组。SBInstalledApplicationsAddedBundleIDs
密钥包含已安装应用程序的软件包ID数组。显然,每次安装/卸载/更新应用程序时都可以记录。
答案 1 :(得分:1)
您可以使用其包ID
检查是否安装了应用程序BOOL isInstalled = [[LSApplicationWorkspace defaultWorkspace] applicationIsInstalled:@"com.app.identifier"];
if (isInstalled) {
// app is installed }
else {
// app is not installed
}
修改强>
如果您想检查某个应用程序是否已安装,您可以计算user
com.apple.mobile.installation.plist
内的项目,它包含有关已安装应用程序的所有信息。
您可以在plist中写下应用程序的数量,然后再检查并比较结果吗?
// get apps count
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:@"/var/mobile/Library/Caches/com.apple.mobile.installation.plist"];
int numberOfApps = [[dict objectForKey: @"User"] count];
NSLog(@"Count: %i",numberOfApps);
// Save apps count inside a plist
NSString *path = @"/var/mobile/AppsCount.plist";
NSFileManager *fm = [NSFileManager defaultManager];
NSMutableDictionary *data;
if ([fm fileExistsAtPath:path]) {
data = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
}
else {
// If the file doesn’t exist, create an empty dictionary
data = [[NSMutableDictionary alloc] init];
}
[data setObject:[NSNumber numberWithInt:numberOfApps] forKey:@"savedAppsCount"];
[data writeToFile:path atomically:YES];
[data release];
然后将旧计数与新应用计数进行比较:
// get current number of apps
NSString *path = @"/var/mobile/AppsCount.plist";
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:@"/var/mobile/Library/Caches/com.apple.mobile.installation.plist"];
int numberOfApps = [[dict objectForKey: @"User"] count];
// retrieve old app count and compare to new ones
NSMutableDictionary *retrieveCounts = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
int oldAppCount = [[retrieveCounts objectForKey:@"savedAppsCount"] intValue];
if (oldAppCount < numberOfApps) {
NSLog(@"NEW APP GOT INSTALLED");
}
else if (oldAppCount > numberOfApps) {
NSLog(@"AN APP GOT UNINSTALLED");
}
else {
NSLog(@"NOTHING GOT INSTALLED OR UNINSTALLED");
}
[retrieveCounts release];
但是这并没有给你时间,只是检查是否安装了新的应用程序
可能有更好的方法可以做到这一点,但这就是我想到的。 希望它有所帮助。