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