Cosa voglio fare nella mia app: 1. Quando l'utente apre l'app, sarà in grado di vedere un conto alla rovescia già in esecuzione. In tal caso, voglio mostrare i numeri del conto alla rovescia in una visualizzazione testuale che verrà aggiornata ogni secondo. 2. L'utente sarà in grado di fermarlo. 3. L'utente può lasciare l'applicazione, ma il conto alla rovescia dovrebbe continuare e mostrare l'ora aggiornata quando ritorna all'interfaccia utente dell'applicazione.Implementazione di un conto alla rovescia con Servizio in background
Quindi, in base ai punti precedenti, capisco che è necessario implementare il servizio che funziona in background. Ho letto il link this ma il mio problema riguarda l'implementazione. Sono abbastanza perso su come implementare in quel modo. Detto questo, non riesco nemmeno a pensare a un modo per mostrare il tempo nell'interfaccia utente una volta che l'utente torna all'applicazione. Ho anche visto this link, ma non sono sicuro che l'implementazione di CountDownTimer lo renda un servizio in esecuzione. Quindi, come devo procedere e implementarlo? Qualsiasi link a tutorial/codici specifici è apprezzato. Grazie.
AGGIORNAMENTI: io sono stati finora in grado di effettuare le seguenti operazioni: MainActivity.java
public class MainActivity extends Activity {
Button btnStart,btnStop;
Intent serviceIntent;
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnStart = (Button) findViewById(R.id.btnStart);
btnStop = (Button) findViewById(R.id.btnStop);
tv = (TextView) findViewById(R.id.timeView);
//final MyCounter timer = new MyCounter(100000,1000);
//tv.setText("100");
//timer.start();
serviceIntent = new Intent(MainActivity.this,MyService.class);
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
startService(serviceIntent);
}
});
btnStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
stopService(serviceIntent);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
MyService.java:
public class MyService extends Service {
MyCounter timer;
@Override
public void onCreate() {
// TODO Auto-generated method stub
timer = new MyCounter(100000,1000);
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
timer.start();
return super.onStartCommand(intent, flags, startId);
}
private class MyCounter extends CountDownTimer{
public MyCounter(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onFinish() {
Toast.makeText(getApplicationContext(), "death", Toast.LENGTH_LONG).show();
stopSelf();
}
@Override
public void onTick(long millisUntilFinished) {
Toast.makeText(getApplicationContext(), (millisUntilFinished/1000)+"", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
timer.cancel();
//stopSelf();
super.onDestroy();
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
}
Il problema è: 1. non lo faccio sapere come mostrare il conto alla rovescia sull'interfaccia utente MainActivity a parte questo Toast. 2. Non smette di contare quando premo il pulsante Stop.
Penso che si possa utilizzare trasmissioni come una comunicazione, questo vi aiuterà. –
@GhalebKhaled potresti spiegare l'implementazione? Ho visto un tutorial di vogella http://www.vogella.com/articles/AndroidServices/article.html e non ho potuto aiutarmi a capire come vengono chiamati i ricevitori di broadcast. – Arefin
controllo http://www.vogella.com/articles/AndroidBroadcastReceiver/article.html e http://www.edureka.in/blog/android-tutorials-broadcast-receivers/ sperando che questo vi aiuterà a –