I've been experimenting with this a little. I'm currently unable to test on a physical device so I'd love some feedback, but everything seems to be working great in the simulator.
The basic idea is to check the X, Y and Z values (Acceleration) every so often (POLLINGINTERVAL) and compare to the last check to see if they've increased a significant enough amount (SENSITIVITY) and have also met a minimum acceleration (MINACCEL). I just created a group called Shake Detection, added some local variables to track the current values, global values to detect the previous values and some local constants to let me easily tweak things. To let my game know if I've detected any shaking I set the global variable IsShaking to 1. Here's a screenshot of my events/actions:
Looks like I can't post links yet, so add the http:// to the following "link" to see the image:
To use this, I just create another System Event (Compare Variable) and check if IsShaking = 1. If it does, the first thing I do is set IsShaking = 0 and do whatever action(s) I wanted.
This is just what I came up with. If anyone has any suggestions or tweaks, please let me know! Thanks!