JavascriptProva

mercoledì 27 luglio 2016

Aggiustamento dati letti dalle SharedPreferences sugli intervalli e correzione di un bug dovuto all'interdipendenza delle SeekBars.

Devo aggiustare i tempi in relazione ai dati letti nelle SharedPreferences.
Leggo le SharedPreferences direttamente in TimerService.
  AlarmManager alarmManager=(AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);
  int intervalloMin=SP.getInt("intervalloMin", 0);
  int intervalloMax=SP.getInt("intervalloMax",0);
  int delta=intervalloMax-intervalloMin;
Ho preso i due intervalli e ne calcolo la differenza.
Ecco come ho sistemato la cosa:
 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);
  int intervalloMin=SP.getInt("intervalloMin", 0);
  int intervalloMax=SP.getInt("intervalloMax",0);
  int delta=intervalloMax-intervalloMin;
  Random rnd=new Random();
  int casuale=rnd.nextInt(delta+1);
  int tempo=intervalloMin+casuale;
  
  alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
      SystemClock.elapsedRealtime()+tempo*60*1000, 
      pendingIntent);
  if(mAlarmChangeListener!=null) mAlarmChangeListener.AlarmChange();
Il fatto di prendere la differenza più uno mi salva dal bug della differenza pari a zero, che si manifesta quando il parametro di Random.nextInt sia zero.
Comunque funziona.

Ora devo rivedere come si fa a scegliere la suoneria...

Ma prima ecco un altro erroraccio!
Ho ottenuto ugualmente un errore dovuto al fatto che la differenza fra intervalloMin e intervalloMax era negativa.
Semplicemente avevo omesso di salvare le SharedPreferencesi di ambedue le SeekBars una volta mossa una di queste: infatti esse sono interdipendenti con lo scopo di evitare il paradosso di un intervalloMin superiore a un intervalloMax.
Ecco il codice corretto:
  seekBarMin.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
   
   @Override
   public void onStopTrackingTouch(SeekBar seekBar) {
    SharedPreferences.Editor editor=SP.edit();
    editor.putInt("intervalloMin", seekBar.getProgress());
    editor.putInt("intervalloMax",seekBarMax.getProgress());
    editor.commit();

.....................

  seekBarMax.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
   
   @Override
   public void onStopTrackingTouch(SeekBar seekBar) {
    SharedPreferences.Editor editor=SP.edit();
    editor.putInt("intervalloMax", seekBar.getProgress());
    editor.putInt("intervalloMin", seekBarMin.getProgress());
    editor.commit();
E ora funziona.

Nessun commento:

Posta un commento