iOS touch event notifications (private API)

前端 未结 1 1975
一生所求
一生所求 2020-12-01 02:35

It\'s possible to simulate touch events on iOS, and you can receive various system wide notifications when in the background using CTTelephonyCenterAddObserver and CFNotific

相关标签:
1条回答
  • 2020-12-01 03:04

    You can use the IOHID stuff in IOKit to get the x, y coordinates.

    #include <IOHIDEventSystem.h>
    

    create IOHIDEventSystemClient:

    void *ioHIDEventSystem = IOHIDEventSystemClientCreate(kCFAllocatorDefault);
    

    register callback:

    IOHIDEventSystemClientScheduleWithRunLoop(ioHIDEventSystem, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
    IOHIDEventSystemClientRegisterEventCallback(ioHIDEventSystem, handle_event, NULL, NULL);
    

    unregister callback:

    IOHIDEventSystemClientUnregisterEventCallback(ioHIDEventSystem, handle_event, NULL, NULL);
    IOHIDEventSystemClientUnscheduleWithRunLoop(ioHIDEventSystem, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
    

    callback:

    void handle_event (void* target, void* refcon, IOHIDServiceRef service, IOHIDEventRef event) {
       if (IOHIDEventGetType(event)==kIOHIDEventTypeDigitizer){
           IOHIDFloat x=IOHIDEventGetFloatValue(event, (IOHIDEventField)kIOHIDEventFieldDigitizerX);
           IOHIDFloat y=IOHIDEventGetFloatValue(event, (IOHIDEventField)kIOHIDEventFieldDigitizerY);
           int width = [[UIScreen mainScreen] bounds].size.width;
           int height = [[UIScreen mainScreen] bounds].size.height;
           NSLog(@"click : %f, %f", x*width, y*height) ;
       }
    }
    

    Also, you can check this out: IOHIDEventSystemCreate on iOS6 failed. Hope this helps.

    EDIT: Please see the result from the log. Tested on iPhone 4 and 5.

    void handle_event (void* target, void* refcon, IOHIDServiceRef service, IOHIDEventRef event) {
        NSLog(@"handle_event : %d", IOHIDEventGetType(event));
    if (IOHIDEventGetType(event)==kIOHIDEventTypeDigitizer){
        IOHIDFloat x=IOHIDEventGetFloatValue(event, (IOHIDEventField)kIOHIDEventFieldDigitizerX);
        IOHIDFloat y=IOHIDEventGetFloatValue(event, (IOHIDEventField)kIOHIDEventFieldDigitizerY);
        NSLog(@" x %f : y %f", x, y);
    //2013-03-28 10:02:52.169 MyIOKit[143:907] handle_event : 11
    //2013-03-28 10:02:52.182 MyIOKit[143:907]  x 0.766754 : y 0.555023
    }
    }
    
    0 讨论(0)
提交回复
热议问题