Si apre MainActivity.
In onStart si avvia e si binda il Service:
public void onStart() {
super.onStart();
Intent intent = new Intent(this, TimerService.class);
startService(intent);
bindService(intent, mConnection, Service.BIND_AUTO_CREATE);
}
Il Service, una volta attivo, crea SharedPreferences:
public class TimerService extends Service { SharedPreferences SP; public TextToSpeech tts; OnAlarmChangeListener onAlarmChangeListener; boolean alarmOn; Handler handler=new Handler(); IBinder mBinder=new LocalBinder(); @Override public void onCreate(){ Intent intent=new Intent(this,MainActivity.class); PendingIntent pi=PendingIntent.getActivity(this, 0, intent, 0); Notification notification=new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.cornetta) .setContentTitle("CoachCall") .setContentText("Telefonate dal Coach") .setContentIntent(pi).build(); startForeground(1,notification); SP=getApplicationContext().getSharedPreferences("settings", Context.MODE_PRIVATE); SharedPreferences.Editor editor= SP.edit(); editor.putInt("intervalloMin", 10); editor.putInt("intervalloMax", 10); editor.commit();Qui viene direttamente impostato intervalloMin e intervalloMax.
Quindi in startTime, ossia quando già onCreate è stato chiamato, si usano intervalloMin e intervalloMax:
public void startTime(){ int intervalloMin=SP.getInt("intervalloMin", 0); int intervalloMax=SP.getInt("intervalloMax", 0); int delta=intervalloMax-intervalloMin; Random rnd=new Random(); int differenza=(intervalloMax==intervalloMin)? 0 : rnd.nextInt(delta); int intervallo=intervalloMin+differenza; Runnable runnable=new Runnable(){ @Override public void run() { Intent intent =new Intent(getApplicationContext(),Telefono.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); startActivity(intent); } }; handler.postDelayed(runnable, intervallo*1000); alarmOn=true; if(onAlarmChangeListener!=null)onAlarmChangeListener.AlarmChange(); }
Quando si apre l'activity Impostazioni degli Intervalli, ecco il codice:
SP=getApplicationContext().getSharedPreferences("settings",Context.MODE_PRIVATE); seekBar1=(SeekBar)findViewById(R.id.seekBar1); seekBar2=(SeekBar)findViewById(R.id.seekBar2); textView1=(TextView)findViewById(R.id.textView1); textView2=(TextView)findViewById(R.id.textView2); //codice che setta le seekBars in relazione ai valori letti nelle impostazioni seekBar1.setMax(230); intervalloMin=SP.getInt("intervalloMin", 10); setTextViewFromSeekBar(intervalloMin,textView1); seekBar1.setProgress(intervalloMin-10); seekBar2.setMax(230); intervalloMax=SP.getInt("intervalloMax", 10); setTextViewFromSeekBar(intervalloMax,textView2); seekBar2.setProgress(intervalloMax-10);All'atto della regolazione degli intervalli, il valore che viene preso in caso di settings non inizializzati è 10.
In base a questo vengono compilati le TextView con i valori e le seekBars, la cui posizione viene settata a 10 in meno, in modo che per un valore di 10 vengano settate effettivamente a 0.
Il punto centrale è quello dell'utilizzo dei settings nella funzione setTime di TimerService.
Un codice come questo
SharedPreferences.Editor editor= SP.edit(); editor.putInt("intervalloMin", 10); editor.putInt("intervalloMax", 10); editor.commit();seguito da questo che preleva i dati per l'utilizzo effettivo in startTime
public void startTime(){ int intervalloMin=SP.getInt("intervalloMin", 0); int intervalloMax=SP.getInt("intervalloMax", 0); int delta=intervalloMax-intervalloMin; Random rnd=new Random(); int differenza=(intervalloMax==intervalloMin)? 0 : rnd.nextInt(delta); int intervallo=intervalloMin+differenza; Runnable runnable=new Runnable(){ @Override public void run() { Intent intent =new Intent(getApplicationContext(),Telefono.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); startActivity(intent); } };non ha senso: meglio togliere l'impostazione iniziale e prendere direttamente come 10 il valore in startTime se il setting non è inizializzato.
Ossia, il primo diventa:
SP=getApplicationContext().getSharedPreferences("settings", Context.MODE_PRIVATE);mentre in startTime:
public void startTime(){ int intervalloMin=SP.getInt("intervalloMin", 10); int intervalloMax=SP.getInt("intervalloMax", 10); int delta=intervalloMax-intervalloMin; Random rnd=new Random(); ....Quindi quando andremo a regolare gli intervalli, lasciando tutto inalterato...
seekBar1.setMax(230); intervalloMin=SP.getInt("intervalloMin", 10); setTextViewFromSeekBar(intervalloMin,textView1); seekBar1.setProgress(intervalloMin-10); seekBar2.setMax(230); intervalloMax=SP.getInt("intervalloMax", 10); setTextViewFromSeekBar(intervalloMax,textView2); seekBar2.setProgress(intervalloMax-10);in caso di non inizializzazione dei settings, l'intervallo preso per buono sarà 10, che andrà messo pari pari nelle TextView mentre seekBars saranno settate al valore -10, ossia a zero.
Una volta che invece con le seekBars sarà settato un valore diverso, questo sarà quello utilizzato in startTime del Service, e quello letto dai settings nel form per la regolazione degli intervalli, sempre settando le seekBars al valore sottratto di 10.
Nessun commento:
Posta un commento