Is there a way to detect if an external (bluetooth or usb) keyboard is connected to the iPad?
An indirect and SDK-safe way is to make a text field a first responder. If the external keyboard is present, the
UIKeyboardWillShowNotification local notification shall not be posted.
You can listen to the
kGSEventHardwareKeyboardAvailabilityChangedNotification) Darwin notification, but this is a private API, so it's possible your app will get rejected if you use this. To check if the external hardware is present, use the private
UIKit listens to this and sets the
UIKeyboardImpl.isInHardwareKeyboardMode property accordingly, but again this is private API.