JavascriptProva

mercoledì 20 luglio 2016

Progetto Kouros: creazione dell'AlarmManager nel servizio TimerService.

Innesco e cancellazione dell'AlarmManager.
Questo è il codice che nel mio progetto TimeManager gestisce la cancellazione dell'AlarmManager nel Service:
  bttStop.setOnClickListener(new View.OnClickListener() {
   
   @Override
   public void onClick(View v) {
    mService.StopTime();
    if(mService.AlarmOn()){
     textView.setTextColor(Color.GREEN);
     textView.setText("ATTIVO");
    }else{
     textView.setTextColor(Color.RED);
     textView.setText("INATTIVO");
    }
    
   }
  });
Fa riferimento a due funzioni del Service: StopTime e AlarmOn.
Vediamo...

StopTime:
 public void StopTime(){
  Log.e("CONTESTO STOP",getApplicationContext()+"");
  Intent intent=new Intent(getApplicationContext(),Form.class);
  PendingIntent pendingIntent=PendingIntent.getActivity(getApplicationContext(),0,intent,0);
  AlarmManager alarmManager=(AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);
  alarmManager.cancel(pendingIntent);
  if(pendingIntent!=null)pendingIntent.cancel();
 }
Se ricordo bene, ricrea esattamente le stesse classi di StartTime:
 public void StartTime(){
  Log.e("CONTESTO START",getApplicationContext()+"");
  SharedPreferences SP=getApplicationContext().getSharedPreferences("tempi", Context.MODE_PRIVATE);

  Intent intent=new Intent(getApplicationContext(),Form.class);
  PendingIntent pendingIntent=PendingIntent.getActivity(getApplicationContext(),0,intent,0);
  AlarmManager alarmManager=(AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);
  int base=(int) (SystemClock.elapsedRealtime()+(SP.getInt("ore",0)*60+SP.getInt("minuti", 0))*60*1000);
  int range=(SP.getInt("rndOre",0)*60+SP.getInt("rndMinuti", 0))*60*1000;
  Random rand=new Random();
  int tempo=base-range+rand.nextInt(range*2+1);
  alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, tempo, pendingIntent);
 }


Confronto:
  Intent intent=new Intent(getApplicationContext(),Form.class);
  PendingIntent pendingIntent=PendingIntent.getActivity(getApplicationContext(),0,intent,0);
  AlarmManager alarmManager=(AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);


  Intent intent=new Intent(getApplicationContext(),Form.class);
  PendingIntent pendingIntent=PendingIntent.getActivity(getApplicationContext(),0,intent,0);
  AlarmManager alarmManager=(AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);
Poi, mentre l'uno usa il metodo set, l'altro usa il metodo cancel.

Invece AlarmOn verifica se l'AlarmManager sia attivo...

Ecco, ho ricreato la triade:
 public void StartTime(){
  Intent intent=new Intent(getApplicationContext(),Form.class);
  PendingIntent pendingIntent=PendingIntent.getActivity(getApplicationContext(),0, intent, 0);
  AlarmManager alarmManager=(AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);
  alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+10*1000, pendingIntent);
 }
 
 public void StopTime(){
  Intent intent=new Intent(getApplicationContext(),Form.class);
  PendingIntent pendingIntent=PendingIntent.getActivity(getApplicationContext(),0, intent,0);
  AlarmManager alarmManager=(AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);
  alarmManager.cancel(pendingIntent);
  if(pendingIntent!=null)pendingIntent=null;
 }
 
 public boolean AlarmOn(){
  Intent intent=new Intent(getApplicationContext(),Form.class);
  boolean isAlarmOn=(PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_NO_CREATE)!=null);
  return isAlarmOn;
  
 }
Dunque, chiamando dalla MainActivity, il processo può essere attivato o deattivato, e si può avere il feedback se sia attivo o non attivo.

Lo schema è sempre quello. Potrei impostare anche i tempi, sempre a partire dalla MainActivity.
Dovrei studiare un sistema migliore per l'impostazione dei tempi...

Comunque per il momento lasciamolo così.

Adesso imposto una semplice suoneria alla scadenza del tempo.

Nessun commento:

Posta un commento