我似乎有与停止码头反弹的问题完全相反的问题。
我无法让我的应用程序不断弹跳停靠图标!
我也讨厌不断弹跳停靠图标,但在这种情况下,如果用户没有意识到我的应用程序无法启动,他们可能会丢失数小时的时间跟踪数据。
这是我放在应用程序委托 applicationWillFinishLaunching: 方法中的代码。
if (!AXAPIEnabled()) { // I'm checking that Accessibility is turned on
NSAlert *alert = [[NSAlert alloc] init];
[alert setAlertStyle:NSCriticalAlertStyle];
[alert setMessageText:@"Lapsus cannot run."];
[alert addButtonWithTitle:@"Open Accessibility Prefs..."];
[alert addButtonWithTitle:@"Quit"];
[alert setInformativeText:@"Lapsus needs \"Enable access for assistive devices\" in the Accessibility pane of System Preferences to be turned on."];
[NSApp activateIgnoringOtherApps:YES];
int attentionrequest = [NSApp requestUserAttention:NSCriticalRequest];
NSInteger returnValue = [alert runModal];
....
[NSApp cancelUserAttentionRequest:attentionrequest];
}
我试过删除 requestUserAttention 行。
我尝试将 requestUserAttention 行放在很多不同的地方:直接在 runModal 调用之前,第一件事等。
我试过删除 activateIgnoringOtherApps 行。
无论我做什么,停靠图标都会反弹一次然后停止。
用户可能会在我将其置于最前面时看到我的应用程序,但如果他们在正确的时间单击,他们的活动应用程序可能会隐藏严重错误消息。
所以我想要一些东西,即使他们的码头被隐藏了,他们也知道有些事情是不对的。
我正在 Mac OS X 10.5 Leopard 上构建它。关于我做错了什么的任何想法?或者 Leopard 不再支持不断弹跳的停靠栏图标了?
更新:
我将方法调用放在 applicationWillFinishLaunching 中:
一旦我将它放入 applicationDidFinishLaunching:,并删除了 activateIgnoringOtherApps: 调用,它就会按要求工作。
但是,我的问题仍然是“我可以将我的应用程序放在前面以及弹跳停靠图标吗?从第一个答案来看,似乎不是,尽管我不确定我明白为什么。
更新:
我不明白为什么,因为我没有考虑清楚。既然有人向我指出,窃取焦点意味着扩展坞得到了它想要的东西,这完全有道理。
结论
如果您希望用户注意,请不要使用 [NSApp activateIgnoringOtherApps:YES];