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