Iphone 如何判断离开iOS应用程序是通过快速应用程序切换还是手动进入前台?
有没有办法判断iOS应用程序是通过快速应用程序切换还是手动进入前台?我需要在调用applicationWillEnterForeground时知道,因此根据应用程序进入前台的条件,可以执行(或不执行)某些特定代码 编辑: 事实证明,这对我来说更像是一个设计问题。我将代码移动到ApplicationIDBecomeActive。我还向appDelegate添加了一个名为fastAppSwitching的BOOL属性(可能名称不对)。我在application:handleOpenURL和application:openURL:sourceApplication:annotation中将其设置为YES。然后,我向应用程序添加了以下代码:didFinishLaunchingWithOptions:Iphone 如何判断离开iOS应用程序是通过快速应用程序切换还是手动进入前台?,iphone,ios,facebook,background,fast-app-switching,Iphone,Ios,Facebook,Background,Fast App Switching,有没有办法判断iOS应用程序是通过快速应用程序切换还是手动进入前台?我需要在调用applicationWillEnterForeground时知道,因此根据应用程序进入前台的条件,可以执行(或不执行)某些特定代码 编辑: 事实证明,这对我来说更像是一个设计问题。我将代码移动到ApplicationIDBecomeActive。我还向appDelegate添加了一个名为fastAppSwitching的BOOL属性(可能名称不对)。我在application:handleOpenURL和appli
if (launchOptions) {
self.fastAppSwitching = YES;
}
else {
self.fastAppSwitching = NO;
}
在ApplicationIDBecomeActive中,我使用了以下代码:
if (fastAppSwitching == YES) {
self.fastAppSwitching = NO; //stop, don't go any further
}
else {
...
}
EDIT2:MaxGabriel在下面提出了一个很好的观点:“这只是对采用此处所述解决方案的其他人的一个警告,ApplicationIDBecMeactive:在用户忽略电话或短信时调用,与applicationWillEnterForeground不同。”。这实际上也适用于应用内购买和Facebook应用内授权(iOS 6新增)。因此,通过进一步测试,这是当前的解决方案: 添加一个名为passedThroughWillEnterForeground的新Bool 在applicationWillResignActive中:
self.passedThroughWillEnterForeground = NO;
在ApplicationIdentinterBackground中:
self.passedThroughWillEnterForeground = NO;
在applicationWillEnterForeground中:
self.passedThroughWillEnterForeground = YES;
在ApplicationIDBecomeActive中:
if (passedThroughWillEnterForeground) {
//we are NOT returning from 6.0 (in-app) authorization dialog or in-app purchase dialog, etc
//do nothing with this BOOL - just reset it
self.passedThroughWillEnterForeground = NO;
}
else {
//we ARE returning from 6.0 (in-app) authorization dialog or in-app purchase dialog - IE
//This is the same as fast-app switching in our book, so let's keep it simple and use this to set that
self.fastAppSwitching = YES;
}
if (fastAppSwitching == YES) {
self.fastAppSwitching = NO;
}
else {
...
}
EDIT3:我想我们还需要一个bool来判断应用程序是否从已终止的应用程序启动。如果您的应用程序是从另一个应用程序打开的,则会对您的应用程序代理调用应用程序:openURL:sourceApplication:annotation。如果您的应用程序是从另一个应用程序打开的,
application:openURL:sourceApplication:annotation将在您的应用程序代理上调用。如果您的应用程序是由另一个应用程序启动的,则
- (BOOL)application:(UIApplication *)app
openURL:(NSURL *)url
sourceApplicarion:(NSString *)bundleID
annotation:(id)info;
方法在您的应用程序委托上调用。您可以使用此方法来创建e。G将布尔值开关设置为true,以指示应用程序是否由其他程序启动
问题是此方法是在应用程序将进入前台:
之后调用的,因此您无法在该方法中判断您的应用程序是手动还是自动启动的
但是,我怀疑如果您需要在特定方法中检测到这一点,则可能存在设计问题,您可能应该重新组织代码。如果您的应用程序是由另一个应用程序启动的,则
- (BOOL)application:(UIApplication *)app
openURL:(NSURL *)url
sourceApplicarion:(NSString *)bundleID
annotation:(id)info;
方法在您的应用程序委托上调用。您可以使用此方法来创建e。G将布尔值开关设置为true,以指示应用程序是否由其他程序启动
问题是此方法是在应用程序将进入前台:
之后调用的,因此您无法在该方法中判断您的应用程序是手动还是自动启动的
但是,我怀疑如果您需要在特定方法中检测到这一点,您可能会遇到设计问题,您可能应该重新组织代码。您所说的“手动”是什么意思?快速应用切换不也是手动完成的吗?我可能没有正确的术语,但我知道Facebook、Dropbox和其他第三方通常会在应用内实现快速应用切换以进行登录。哦,我明白了。所以你的意思是你想知道你的应用是由另一个应用还是用户启动的,对吗?我想给你指的是那个方法。。。在这种情况下,IDK。但是为什么在应用程序中需要它呢代码>?我在这里发现了一个设计问题。这只是对采用此处所述解决方案的其他人的一个警告,applicationdidebomeactive:
在用户忽略电话或短信时被调用,而不像applicationWillEnterForeground
你所说的“手动”是什么意思?快速应用切换不也是手动完成的吗?我可能没有正确的术语,但我知道Facebook、Dropbox和其他第三方通常会在应用内实现快速应用切换以进行登录。哦,我明白了。所以你的意思是你想知道你的应用是由另一个应用还是用户启动的,对吗?我想给你指的是那个方法。。。在这种情况下,IDK。但是为什么在应用程序中需要它呢代码>?我在这里发现了一个设计问题。这只是对采取此处所述解决方案的其他人的一个警告,applicationdidebomeactive:
在用户忽略电话或短信时被调用,而不像上面所述的application将进入前台
,“是的,没错。我知道我可以在application:openURL:sourceApplication:annotation:(id)annotation
中找到这一点,但问题是直到applicationWillEnterForeground之后才调用该方法,这太晚了。“。因此,他正在寻找一个委托方法,该方法将在此之前调用。抱歉。我错过了关于这件事的评论。@MichaelMior没问题,不管怎样,这就是我最终要去的地方。我给H2CO3机会添加他的评论作为回答,因为他帮助我尽早朝着正确的方向前进。谢谢你的回答。根据他在上面的评论,“是的,没错。我知道我可以在应用程序:openURL:sourceApplication:annotation:(id)annotation
中找到它,但问题是该方法在applicationWillEnterForeground之后才调用,这太晚了。”。因此,他正在寻找一个委托方法,该方法甚至在此之前就被调用。抱歉。我错过了关于这件事的评论。@MichaelMior没问题,不管怎样,这就是我最终要去的地方。我给H2CO3机会添加他的评论作为回答,因为他帮助我尽早朝着正确的方向前进。谢谢你的回答。我认为这基本上是一个很好的答案,但事实发生后我学到了更多,正如我在原始问题中的评论所示。我仍然想找到一种更简单的方法,让bools在app委托中设置,来判断一个app是否从授权另一个app回来,ei