How do I detect a shaking motion using LiveCode mobile?
This lesson will show you how to start using the 'motion' features provided by the accelerometer on an iOS or Android device. Specifically we will look at how you might make your application perform a certain action when the device is given a good shake.
You can download the sample stack from this url: https://tinyurl.com/ybtsv965
Create a stack with a field to display your messages
1) Create a stack
2) Set it to by 320px wide and 460px tall
3) Drag out a new field object
4) Set its name to "messages"
5) untick the 'Focusable' or 'traversalOn' setting
New 'Motion' Messages
We have added two now messages that allow your stacks to be notified when a 'motion' on the device starts and when one stops. Place these two handlers on the card or stack script of your stack.
on motionStart pMotion # This handler is called when a 'motion' starts end motionStart
on motionEnd pMotion # This handler is called when a 'motion' ends end motionEnd
Lets start by making sure that we are getting the messages we expect.
on motionStart pMotion put empty into field "messages" put "motion start:" && pMotion into line 1 of field "messages" end motionStart
on motionEnd pMotion put "motion end:" && pMotion into line 2 of field "messages" end motionEnd
The Android simulator does not provide a feature allowing you to test shake motions. To test on Android you will need to test directly on a device, of course the device must have an accelerometer.
Firstly ensure your device is set up and connected as described in the lessons
And that you have set up LiveCode for Android depolyment.
1) Select your Android device from the Development Menu
2) Click Test
The application is deployed to your device and is ready to be tested.
For iOS devices simply click on the Simulate button in the menuBar. Once the simulator has loaded select Shake Gesture from the simulator's Hardware menu.
So we are getting start and end motion messages. Lets expand out to time how long the user shakes their phone for.
Time how long the shake lasts
Update the card script to the following. It will check if the motion messages are 'shake' and if so record the time of the start and end to get the final result:
# Variable to hold when the shake started local sStartTime on motionStart pMotion # If the motion is a shake do this if pMotion is "shake" then put empty into field "messages" # Store the moment the shake started put the milliseconds into sStartTime put "Shake Started" into line 1 of field "messages" end if end motionStart
on motionEnd pMotion if pMotion is "shake" then put "Shake Ended" into line 2 of field "messages" # The total length of the shake is the current time - the start time put "Shake Lasted" && the milliseconds - sStartTime && "milliseconds" into line 3 of field "messages" end if end motionEnd
The simulator sends a consistent shake message but you should be able to try out various lengths of shake once you deploy this little app to you phone.