Minuteur en arrière-plan
Je suis le développement d'une Application Android à un collège de travail. Dans ce travail, je souhaite créer un service d'arrière-plan avec une minuterie et lorsque je ferme l'application, la minuterie toujours en cours d'exécution. Quand j'ouvre l'appli, je peux voir le temps depuis que j'ai commencé de service.
Eh bien, mon problème est que lorsque je ferme l'application, le fond de la minuterie s'arrête et ne s'incrémente plus.
Pouvez-vous m'aider s'il vous plaît?
Merci beaucoup
Mon lanceur de classe
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
private Button startButton;
private Button pauseButton;
private TextView timerValue;
Intent intent;
long timeSwapBuff = 0L;
long updatedTime = 0L;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
timerValue = (TextView) findViewById(R.id.timerValue);
startButton = (Button) findViewById(R.id.startButton);
startButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
intent = new Intent(MainActivity.this, CounterService.class);
startService(intent);
registerReceiver(broadcastReceiver, new IntentFilter(CounterService.BROADCAST_ACTION));
}
});
pauseButton = (Button) findViewById(R.id.pauseButton);
pauseButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
unregisterReceiver(broadcastReceiver);
stopService(intent);
}
});
}
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
updateUI(intent);
}
};
private void updateUI(Intent intent) {
int time = intent.getIntExtra("time", 0);
Log.d("Hello", "Time " + time);
int mins = time / 60;
int secs = time % 60;
timerValue.setText("" + mins + ":"
+ String.format("%02d", secs));
}
}
et ici, la classe de service
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.SystemClock;
public class CounterService extends Service {
private Intent intent;
public static final String BROADCAST_ACTION = "com.javacodegeeks.android.androidtimerexample.MainActivity";
private Handler handler = new Handler();
private long initial_time;
long timeInMilliseconds = 0L;
@Override
public void onCreate() {
super.onCreate();
initial_time = SystemClock.uptimeMillis();
intent = new Intent(BROADCAST_ACTION);
handler.removeCallbacks(sendUpdatesToUI);
handler.postDelayed(sendUpdatesToUI, 1000); //1 second
}
private Runnable sendUpdatesToUI = new Runnable() {
public void run() {
DisplayLoggingInfo();
handler.postDelayed(this, 1000); //1 seconds
}
};
private void DisplayLoggingInfo() {
timeInMilliseconds = SystemClock.uptimeMillis() - initial_time;
int timer = (int) timeInMilliseconds / 1000;
intent.putExtra("time", timer);
sendBroadcast(intent);
}
@Override
public void onDestroy() {
super.onDestroy();
handler.removeCallbacks(sendUpdatesToUI);
}
@Override
public IBinder onBind(Intent intent) {
//TODO Auto-generated method stub
return null;
}
}
- C'est une exigence que vous utilisez un
Service
pour cela? Vous pouvez toujours stocker le temps en millisecondes à n'importe quel moment (dans une base de données SQL locale, même dansSharedPreferences
), et d'effectuer une rapide delta de l'arithmétique dansonResume()
pour déterminer combien de temps il a été depuis que l'action que vous essayez de mesurer eu lieu. - Je suis en train d'utiliser un service, d'avoir une notification pour indiquer le temps. Mais ton idée est pas mal du tout
- Eh bien, si vous êtes intéressés à en apprendre plus sur le
Service
classe (comme c'est généralement le cas avec les classes de Collège), puis un coup d'oeil à la réponse fournie par @Mahfa. Sinon, je crois que ma suggestion serait beaucoup plus simple. - avez-vous eu des answerr. J'ai le même problème
Vous devez vous connecter pour publier un commentaire.
vous avez besoin pour démarrer votre service dans le
onStop()
méthode dans votre activité de ce genre:travail pour moi
Je pense que cela devrait fonctionner pour vous.
De bien vouloir passer par le lien de l'espoir qu'il sera utile si vous souhaitez minuterie de fonctionnement en arrière-plan Minuteur en arrière-plan
activity_main.xml
MainActivity.java
Timer_Service.java
Une fois que l'application démarre, vous devez mentionner les heures que vous voulez minuterie pour ... Puis aussi après le meurtre de l'application lorsque vous redémarrage de l'application, il affichera l'heure de début de la minuterie ... Maintenant à vous de personnaliser votre application selon vos besoins .