package org.hansel.myAlert; /*This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. Created by Javier Mejia @zenyagami zenyagami@gmail.com */ import java.io.IOException; import java.util.Date; import org.hansel.myAlert.Log.Log; import org.hansel.myAlert.Utils.PreferenciasHancel; import org.hansel.myAlert.Utils.Util; import android.app.AlarmManager; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.media.AudioManager; import android.media.MediaPlayer; import android.net.Uri; import android.os.Handler; import android.os.IBinder; import android.os.Vibrator; import android.support.v4.app.NotificationCompat; public class ReminderService extends Service { public static int NOTIFICATION_ID=0; private MediaPlayer mMediaPlayer; public static final String CANCEL_ALARM_BROADCAST = "org.hancel.myalert.cancel_alarm"; private Vibrator mVibrator; private Runnable run; private BroadcastReceiver alarmReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { cancelAlarm(); } }; @Override public void onDestroy() { super.onDestroy(); getApplicationContext().unregisterReceiver(alarmReceiver); } @Override public void onCreate() { super.onCreate(); //obtenemos el "n�mero de intentos" getApplicationContext().registerReceiver(alarmReceiver, new IntentFilter(CANCEL_ALARM_BROADCAST)); int count = PreferenciasHancel.getReminderCount(getApplicationContext()); count++; PreferenciasHancel.setReminderCount(getApplicationContext(), count); Log.v("Conteo: "+ count); if(count>=3) { //detenemos la alarma del servicio de recordatorios. y lanzamos el servicio de Tracking AlarmManager am = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); am.cancel(Util.getReminderPendingIntennt(getApplicationContext())); NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); notificationManager.cancel(NOTIFICATION_ID); Log.v("Servicio de Rastreo...."); Util.inicarServicio(getApplicationContext()); startService(new Intent(getApplicationContext(), SendPanicService.class)); stopSelf(); }else { //mandamos una alerta de notificaci�n showNotifciation(); playSound(); mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); Vibra(); Handler han = new Handler(); run = new Runnable() { @Override public void run() { cancelAlarm(); stopSelf(); } }; han.postDelayed(run, 1000*10); //alarma para "regresar" en caso que el usuario no de "click" en la notificaci�n AlarmManager am = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); long due = System.currentTimeMillis() + (60000*3); // 3 minutos Log.v("Scheduling next update at " + new Date(due)); am.set(AlarmManager.RTC_WAKEUP, due, Util.getReminderPendingIntennt(getApplicationContext())); } } protected void cancelAlarm() { if(mMediaPlayer!=null && mMediaPlayer.isPlaying()) { mMediaPlayer.stop(); } if(mVibrator!=null) mVibrator.cancel(); } private void playSound() { mMediaPlayer = new MediaPlayer(); try { mMediaPlayer.setDataSource(getApplicationContext(), Uri.parse(Util.getRingtone(getApplicationContext())) ); final AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) { mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); mMediaPlayer.prepare(); mMediaPlayer.setLooping(true); mMediaPlayer.start(); } } catch (IOException e) { System.out.println("Error tocando alarma"); } } private void Vibra() { int dot = 200; // Length of a Morse Code "dot" in milliseconds int dash = 500; // Length of a Morse Code "dash" in milliseconds int short_gap = 200; // Length of Gap Between dots/dashes int medium_gap = 500; // Length of Gap Between Letters int long_gap = 1000; // Length of Gap Between Words long[] pattern = { 0, // Start immediately dot, short_gap, dot, short_gap, dot, // s medium_gap, dash, short_gap, dash, short_gap, dash, // o medium_gap, dot, short_gap, dot, short_gap, dot, // s long_gap }; mVibrator.vibrate(pattern,0); } private void showNotifciation() { Intent i=new Intent(this, ManageRemindersActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_SINGLE_TOP); i.addCategory(Intent.CATEGORY_LAUNCHER); PendingIntent pi=PendingIntent.getActivity(this, 0, i, 0); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle("Todo esta Bien?") .setContentText("Toca aqui para reportarte?") .setContentIntent(pi) ; Notification notif = mBuilder.build(); NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); notificationManager.notify(NOTIFICATION_ID, notif); //startForeground(1237, notif); } @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } }