// =======================================================
// = Tracker - send SMS text whenever location changes =
// =======================================================
// Apr 3, 2018
// app will work if minimized
// app will work if another app is in the foreground
// app will sort of work if phone is in sleep mode - wakes phone up, but possibly flakey!
// Droidscript keeps phone from going to sleep (inhibits screen timeout) no fix!
// will respond to a received text message - turn tracking on/off, send immediate location
var loc
var sms
var ctr = 0
var oldLocLat = 45.433813 // just to initialize
var oldLocLon = -76.044660
var homeLocLat = 45.433813
var homeLocLon = -76.044660
var SMSnum = ""
var SMSmsg = ""
var SendEvery
var oneMin = 1000 * 60 // check location every minute
var SendImmediate = 0 // flag to send location immediately
var SendToEmail = 1 // default
function OnStart()
{
// Create vertical layout that fills the screen
var lay
app.SetOrientation( "Portrait" )
lay = app.CreateLayout( "Absolute", "Vertical,VCenter,FillXY" )
lay.SetBackGradientRadial(.5,.7,.6, "#3300ffff", "#3300ff00" )
app.AddLayout( lay )
// Create location sensor
loc = app.CreateLocator( "GPS" )
loc.SetOnChange( loc_OnChange )
loc.SetRate( 4 )
// Create SMS object
sms = app.CreateSMS()
sms.SetOnMessage( sms_OnMessage )
// Set one minute interrupt
CheckGpsEveryMin = setInterval( CheckGpsEveryMin, oneMin )
// Buttons: Send to email or phone
btn1 = app.CreateButton( "Send to email" )
btn1.SetPosition( 0.1, 0.1, 0.4, 0.1 ) // left
btn1.SetOnTouch( btn_Email )
lay.AddChild( btn1 )
btn2 = app.CreateButton( "Send to phone" )
btn2.SetPosition( 0.5, 0.1, 0.4, 0.1 ) // right
btn2.SetOnTouch( btn_Phone )
lay.AddChild( btn2 )
}
function btn_Email()
{
SendToEmail = 1
app.SetScreenBrightness( 0 ) // dim screen to save battery
// app.ToBack() // send app to back; screen will immediately return to bright, so not used
}
function btn_Phone()
{
SendToEmail = 0
app.SetScreenBrightness( 0 ) // dim screen to save battery
}
// Run gps to see if location has changed
function CheckGpsEveryMin()
{
app.WakeUp() // wake up app from sleep
if( SendToEmail == 1 ) {
SMSnum = "6245" // unique email number for Bell Canada
}
else {
SMSnum = "5555555555" // phone number
SMSmsg = ""
}
loc.Start() // start locator and send SMS to fixed email address
}
// Send SMS message once we get a location change
function loc_OnChange( data )
{
if (SMSnum != "") {
var dist = loc.GetDistanceTo( oldLocLat, oldLocLon ) // in km
var home = loc.GetDistanceTo( homeLocLat, homeLocLon ) // distance to home
if( dist > 200 | SendImmediate == 1 ) { // motion > 200 meters detected or send now
ctr = ctr + 1 // speed not used as it is useless
SMSmsg = SMSmsg + " #" + ctr + " Bearing: " + data.bearing + " Home: " + (home/1000).toFixed(1) + " km away"
sms.Send( SMSnum, SMSmsg )
app.ShowPopup( SMSmsg + " > " + SMSnum)
oldLocLat = data.latitude
oldLocLon = data.longitude
}
SMSnum = "" // clear for next pass
SMSmsg = ""
}
loc.Stop() // stop locator
SendImmediate = 0
//app.GoToSleep() // put phone to sleep - does nothing without root access!
}
// Parse incoming SMS message for trigger words
function sms_OnMessage( number, msg )
{
var UpperSMSmsg
var w
var t
var x
UpperSMSmsg = msg.toUpperCase()
w = UpperSMSmsg.search("WALDO") // send location data immediately
t = UpperSMSmsg.search("TRACKON") // turn tracker on (default at power up)
x = UpperSMSmsg.search("TRACKOFF") // turn tracker off
if( w >= 0) { // reply to "Waldo" trigger word...
app.WakeUp()
SendImmediate = 1
loc.Start() // start locator
}
else if( t >= 0) { // remotely turn on tracking...
CheckGpsEveryMin = setInterval( CheckGpsEveryMin, oneMin )
SendImmediate = 1 // send immediate response
loc.Start() // start locator
}
else if( x >= 0) { // remotely turn off tracking...
clearInterval( CheckGpsEveryMin )
}
if( SendToEmail == 1 ) {
SMSnum = "6245" // unique email number for Bell Canada
}
else {
SMSnum = "5555555555" // phone number
SMSmsg = ""
}
}