iOS:如何检测硬件蓝牙键盘上的逃生/控制键?
我想弄清楚如何检测Escape(以及其他组合键,如Ctrl和Alt)在连接到iOS设备的蓝牙键盘上被按下。iOS:如何检测硬件蓝牙键盘上的逃生/控制键?
有些答案似乎表明这是不可能的。然而,Appstore中有一些应用程序可以执行此操作(例如iSSH),所以我认为可以以某种方式使用公共API。
我已经尝试过创建自己的UITextInput,但是当按下Esc键时,它没有收到任何东西。 API的唯一部分我可以看到iPad可能响应的地方是启用了VoiceOver(Escape在Safari中的作用),所以我想知道是否有通过无障碍API访问的方法?
我也试着看看是否有什么我可以从NSNotificationCenter观察,可能会有帮助,但还没有找到任何东西。
建议表示欢迎,我一直在黑客入侵这一天,我现在有点亏损。
对于您打算完成的任务,没有公共的API,因此这可能会导致拒绝。
如果您愿意承担风险,您可以尝试this。 Wich基本上通过在UIApplication
中覆盖sendEvent:
来拦截发送到您的应用的所有事件。
所以是的,在我的情况下,它确实导致了拒绝。我仍然想知道AppStore中存在的应用程序是如何做到的。 – new299 2013-04-27 00:08:26
有时,如果您的应用程序进入AppStore,它只取决于评论者......也许该应用程序的开发人员有更多的运气。 – Daniel 2013-04-27 13:09:06
是的,我仍然很好奇。他们实际上拒绝使用_gsEvent,这让我认为它是基于某种静态分析。我发现IainSmith在二进制文件中找不到对_gsEvent的引用是很奇怪的。我已经重新提交没有_gsEvent的应用程序,稍后会尝试重新访问。 – new299 2013-04-28 13:27:35
AFAIK这是不可能使用公共API。 我已经做了一些搜索,并且esc密钥不被识别。 我没有做的唯一的事情就是尝试iSSH
(它花费9欧元:-),但如果你阅读AppStore上的描述,看起来很清楚,硬件(蓝牙)键盘上的ESC键没有工作:
详尽的关键配置支持。有箭头键(通过弹出或通过工具栏)。 CTRL,ALT,ESC,标签,移,FN键(1-10),`键,PgUp键,PgDown键并为那些键未列出提供了多种手段来添加它们。
为蓝牙键盘支持箭头键,功能键和通过选项键映射在任一
X11/VNC
服务器或终端的CTRL密钥的重新映射。启用时,选项 + 键将地图按至等效键Ctrl + 键按。
正如你可以看到,在第二行的ESC键未提及。 此外,我发现这(老)post。
编辑:
正如你上一个更新,我已经找到了一种方法来“隐藏”的_gsEvent
二进制里面。但是,我不知道Apple静态分析仪是否可以找到它。 诀窍很简单...在运行时创建_gsEvent
选择器(和其他私有选择器)!
-(void)sendEvent:(UIEvent *)event
{
SEL aSelector = NSSelectorFromString([self theSelector]);
if ([event respondsToSelector:aSelector]) {
NSLog(@"Event: %@", event.description);
}
[super sendEvent:event];
}
-(NSString *)theSelector
{
// compose the keyword as you prefer
NSString *sel = [NSString stringWithFormat:@"%@g%@%@ent", @"_", @"s", @"Ev"];
return sel;
}
我试图二进制搜索里面,我没有找到_gsEvent
关键字,显然是因为它只是在运行时创建。
希望这会有所帮助。
我已经购买了该应用程序,并且蓝牙键盘上的退出键可以正常工作。它也适用于提示。我已经看到谷歌群组发布,但如果你深入了解群组,你会看到对蓝牙键盘上的Ctrl和Esc键的引用。 – new299 2013-02-18 17:04:11
从你的Mac上,找到iSSH的.app(它在你的iTunes文件夹中,如果不是从AppStore下载的话),右键单击,显示数据包内容,然后用十六进制编辑器打开可执行文件,或者简单地使用textedit。如果您发现“_gsevent”关键字,他们使用私有API – LombaX 2013-02-18 21:33:59
在可执行文件中没有“_gsevent”,但有像“_gs”,“_XkbSendNewKeyboardNotify”,“_XkbProcessKeyboardEvent_ProcessKeyboardEvent”,“_ProcGetKeyboardControl”和“ - [iX11ViewController setKeyboardTrigger:] “对可执行文件显示的内容没有多少经验,只是试图提供帮助。 – 2013-02-24 20:22:29
您可以在iOS的7,现在做到这一点。例如,实施退出键,覆盖UITextView的,并放置在你的类以下方法:
- (NSArray *) keyCommands {
UIKeyCommand *esc = [UIKeyCommand keyCommandWithInput: UIKeyInputEscape modifierFlags: 0 action: @selector(esc:)];
return [[NSArray alloc] initWithObjects: esc, nil];
}
- (void) esc: (UIKeyCommand *) keyCommand {
// Your custom code goes here.
}
你并不需要检查,以确保你使用的是iOS 7,因为早期版本的OS不会调用keyCommands方法。
我提交了一份有关不清楚的文档或缺失的功能的雷达错误报告,它被标记为7649186的副本,标记为关闭。 – new299 2013-02-25 19:00:58