Una aplicación para Android que permite controlar tu teléfono, enviar SMSs, realizar llamadas automáticas, encender y apagar la WiFi, etc. según las condiciones que estable.
¿Y cómo se hace?
Es en lenguaje (casi) javascript, con acceso a una API que controla el teléfono, con funciones y variables del estilo device.audio.ringerVolume = 60;
Aquí os dejo un ejemplo de cómo hacer operaciones en función de la ubicación y la hora:
Empiezo con las funciones que me ayudan a determinar dónde estoy, según la hora:
function esfestivo(fecha)
{
fecha=new Date(fecha);
var esnavidad=false;
var todossantos=false;
if((fecha.getMonth()===12)&&(now.getDate()>=23))esnavidad=true;
if((fecha.getMonth()===1)&&(now.getDate()<=6))esnavidad=true;
if((fecha.getMonth()===11)&&(now.getDate()===1))todossantos=true;
return esnavidad||todossantos;
}
function dialaborable(fecha)
{
fecha=new Date(fecha);
var diasemana=fecha.getDay();
return (diasemana===1)||(diasemana===2)||(diasemana===3)||(diasemana===4)||(diasemana===5);
}
function entrabajo(horafrac)
{
return ((horafrac>=8.5)&&(horafrac<15));
}
function fueraportrabajo(horafrac)
{
return ((horafrac>=7.5)&&(horafrac<15.5));
}
function diadetrabajo(hoy)
{
hoy=new Date(hoy);
return dialaborable(hoy)&&!esfestivo(hoy);
}
function conduciendo(ahora)
{
var fecha=new Date(ahora);
var horafrac=fecha.getHours()+fecha.getMinutes()/60;
if(!diadetrabajo(fecha))return false;
return fueraportrabajo(horafrac)&&!entrabajo(horafrac);
}
function currando(ahora)
{
//console.log("deb 3:"+ahora);
var fecha=new Date(ahora);
//console.log("deb 4:"+fecha);
var horafrac=fecha.getHours()+fecha.getMinutes()/60;
//console.log("deb 2:"+horafrac);
if(!diadetrabajo(ahora))return false;
//console.log("deb 3:"+horafrac);
return entrabajo(horafrac);
}
Estas son las funciones que establecen el estado del dispositivo según el estado:
function onoff(estado)
{
if(estado=="trabajando")
{
device.bluetooth.enabled = false;
setNetwork("wifi",true);
//setNetwork("3g",false);
device.audio.ringerMode = 'normal';
device.audio.ringerVolume = 60;
}
if(estado=="conduciendo")
{
device.bluetooth.enabled = true;
setNetwork("wifi",false);
setNetwork("3g",true);
device.audio.ringerMode = 'normal';
device.audio.ringerVolume = 100;
}
if(estado=="descansando")
{
device.bluetooth.enabled = false;
//setNetwork("wifi",true);
//setNetwork("3g",false);
device.audio.ringerVolume = 100;
}
if(estado=="clase")
{
device.audio.ringerMode = 'silent';
}
}
function setNetwork(networkType, isOn) {
if (networkType === '3g') {
device.network.mobileDataEnabled = isOn;
}
else {
device.network.wifiEnabled = isOn;
}
}
Definimos la función que se invocará periódicamente:
var storage = device.localStorage;
var handler=function evaluar()
{
var anterior = storage.getItem('estado');
var now = new Date();
var h=now.getHours();
var d=now.getDay();
var m=now.getMinutes();
var horafrac=h+m/60;
var estado="descansando";
if(currando(now))estado="trabajando";
if(conduciendo(now))estado="conduciendo";
onoff(estado);
storage.setItem('estado', estado);
if(anterior!=estado){
device.audio.vibrate(50);
}
else{
//device.audio.vibrate(100);
}
};
Y por fin, este es el código que lanza
var hora = new Date();
var mess1 = device.notifications.createNotification("Arrancando");
var mess2 = device.notifications.createNotification("Arrancado");
var timerStart =new Date();
//mess1.show();
//Programamos hora de primera llamada timerStart e intervalo de chequeo: cada 15 minutos
var x=hora.getMinutes();
var evry=15;
x=x/evry;
x=parseInt(x,10); //redondeamos
x=((x+1)*evry); //Preparamos la primera
timerStart.setMinutes(0);
timerStart.setSeconds(0);
var unix=timerStart.getTime()+x*60000;
var intervalo=evry*60*1000;
var params= {name: 'timerIPE1',time: unix,interval: intervalo,repeat: true,exact: false};
device.scheduler.setTimer(params,handler);
Espero que sea de utilidad para alguien.
De todas formas, es mejor usar "llama" si no os queréis complicar la vida.


