package com.tid.examples.alarmservice; import android.app.Activity; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import com.tid.examples.alarmservice.R; /** * Example of use of Alarm Service * http://developer.android.com/reference/android/app/AlarmManager.html * */ public class AlarmExampleActivity extends Activity { //Instancia del AlarmManager private AlarmManager mAlarmManager; //Guardamos como atributo el pending intent para poder cancelarlo private PendingIntent mPendingIntent; //Views private EditText mTime; private EditText mTimeRep; private Button mButtonToast; private Button mButtonNotif; private Button mButtonCall; private Button mButtonToastRep; private Button mCancel; private static final int PHONE_NUMBER = 123; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //Getting the AlarmManager mAlarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); //Find views mTime = (EditText) findViewById(R.id.time); mTimeRep = (EditText) findViewById(R.id.time_rep); mButtonToast = (Button) findViewById(R.id.buttonToast); mButtonNotif = (Button) findViewById(R.id.buttonNotif); mButtonCall = (Button) findViewById(R.id.buttonCall); mButtonToastRep = (Button) findViewById(R.id.buttonToastRep); mCancel = (Button) findViewById(R.id.cancelRep); //Set listeners mButtonToast.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { launchToast(getTime()); } }); mButtonNotif.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { launchNotif(getTime()); } }); mButtonCall.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { launchCall(getTime()); } }); mButtonToastRep.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { launchToastRep(getRepeating()); } }); mCancel.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { cancelRep(); } }); } /** * Toma el tiempo del EditText y lo pasa a formato de milisegundos UTC * * @return */ private long getTime(){ String time = mTime.getText().toString(); long longTime = System.currentTimeMillis() + Integer.valueOf(time)*1000; return longTime; } private long getRepeating(){ String time = mTimeRep.getText().toString(); long longTime = Integer.valueOf(time)*1000; return longTime; } private void launchToast(long time){ //Preparar el PendingIntent //Se lanza a la clase ToastReceiver.java Intent i = new Intent(this, ToastReceiver.class); //Creamos el PendingIntent para BroadcastReceiver (getBroadcast) //Solo se lanza una vez (FLAG_ONE_SHOT) mPendingIntent = PendingIntent.getBroadcast(this, 0, i, PendingIntent.FLAG_ONE_SHOT); //Ponemos la alarma //RTC (Usa System.currentTimeMillis()). mAlarmManager.set(AlarmManager.RTC, time, mPendingIntent); } private void launchNotif(long time){ //Preparar el PendingIntent //Se lanza a la clase NotifReceiver.java Intent i = new Intent(this, NotifReceiver.class); //Creamos el PendingIntent para BroadcastReceiver (getBroadcast) //Solo se lanza una vez (FLAG_ONE_SHOT) mPendingIntent = PendingIntent.getBroadcast(this, 0, i, PendingIntent.FLAG_ONE_SHOT); //Ponemos la alarma //RTC (Usa System.currentTimeMillis()). mAlarmManager.set(AlarmManager.RTC, time, mPendingIntent); } /** * Prepares an alarm to launch Phone app * * @param time */ private void launchCall(long time){ //Preparar el PendingIntent //En este caso es un intent implicito, con accion ACTION_DIAL y un numero de telefono Intent i = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + PHONE_NUMBER)); //Creamos el PendingIntent para Activity (getActivity) //Solo se lanza una vez (FLAG_ONE_SHOT) PendingIntent pending = PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_ONE_SHOT); //Ponemos la alarma //RTC (Usa System.currentTimeMillis()). mAlarmManager.set(AlarmManager.RTC, time, pending); } private void launchToastRep(long repeteating){ //Preparar el PendingIntent //Se lanza a la clase ToastReceiver.java Intent i = new Intent(this, ToastReceiver.class); //Creamos el PendingIntent para BroadcastReceiver (getBroadcast) //Se repite (ponemos FLAG_UPDATE_CURRENT) mPendingIntent = PendingIntent.getBroadcast(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT); //Ponemos la alarma con repeticion //RTC (Usa System.currentTimeMillis()). mAlarmManager.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), repeteating, mPendingIntent); } private void cancelRep(){ //Cancela el PendingIntent (el ultimo) mAlarmManager.cancel(mPendingIntent); Toast.makeText(this, "Cancelada", Toast.LENGTH_SHORT).show(); } }