Die Implementierung eines Count-down-timer mit Service im hintergrund
Was ich tun soll in meiner app:
1. Wenn der Benutzer die app öffnet, wird er in der Lage, um zu sehen, eine bereits laufende countdown-timer. So in diesem Fall möchte ich zeigen die zahlen des Countdowns in eine textview, die wird immer aktualisiert, jede Sekunde.
2. Die Benutzer werden in der Lage sein, um es zu stoppen.
3. Der Benutzer kann die Anwendung verlassen, aber der countdown sollte die noch gehen Sie auf und zeigen Sie die aktuelle Uhrzeit, wenn er kommt zurück, um der UI der Anwendung.
Also auf der Grundlage der oben genannten Punkte, kann ich verstehen, muss ich implementieren, Service -, das funktioniert im hintergrund. Ich habe gelesen, diese link, aber mein problem ist die Umsetzung. Ich bin ganz bei verloren darüber, wie zu implementieren, die Art und Weise. That being said, ich kann auch nicht denken Sie an einen Weg zu zeigen, die Zeit in der Benutzeroberfläche nachdem der Benutzer kommt wieder auf die Anwendung. Ich habe auch gesehen, dieser link als gut, aber ich bin nicht sicher, ob nur die CountDownTimer macht es einen Laufenden Service.
Also wie soll ich Vorgehen und Umsetzung? Alle links zu bestimmten tutorials/codes sind geschätzt. Danke.
UPDATES: ich habe bisher in der Lage, Folgendes zu tun:
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;
}
}
Das problem ist:
1. Ich weiß nicht, wie um zu zeigen, der countdown auf der MainActivity UI abgesehen von diesem Toast.
2. Es hört nicht auf zu zählen, wenn ich drücken Sie die Stop-Taste.
könnten Sie bitte erklären, um die Umsetzung? Ich habe gesehen, ein tutorial von vogella vogella.com/articles/AndroidServices/article.html und der konnte mir nicht helfen zu verstehen, wie broadcast-Empfänger genannt werden.
check vogella.com/articles/AndroidBroadcastReceiver/article.html und edureka.in/blog/android-tutorials-broadcast-Receiver hoffe das wird dir helfen
Sie können LocalBroadcastManager, es ist der einfachste Weg, siehe dieses tutorial intertech.com/Blog/Post/...
der link funktioniert nicht 🙁
InformationsquelleAutor Arefin | 2013-05-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
verwenden bindService(Intent-service, ServiceConnection conn, int flag) zu binden, countdown-service, die in Ihrem Dienst, kehren Sie Ihre Bindemittel enthalten, Ihre Anzahl und Ihre Aktivität, eine instanziiert ServiceConnection-Objekt kann mit dem binder. AIDL können dies tun, wie gut, schlage vor, einen Blick auf, wie zu binden, service, Erstens, wünschen Ihnen helfen kann.
demo
}
und dann die Aktivität
OK, hier ist meine demo, die ich Bearbeiten, meine Antwort zu Ihnen zeigen.
wenn ich auf service-status-button, die app stürzt ab 🙁
ich weiß nicht wie und ich hoffe, Sie können mir zeigen, dem log, aber ich glaube nicht, können Sie meine demo direkt, zum Beispiel, Sie brauchen, um hinzuzufügen, Vorsatz-filter Filtrat die Aktion "org.crazyit.service.BIND_SERVICE", wenn Sie registe den Dienst in der manifest.xml
es funktioniert jetzt, aber das Hauptproblem noch besteht. wenn ich drücken Sie die zurück-Taste, die es entbindet, und der Zähler nicht weiter, nachdem ich wieder an der UI. Ich bin zufällig durch die gleiche Sache mit Bindungen, und ich bekomme ein Gefühl, dass die Bindungen dieses problem nicht lösen können. oder kann es?
InformationsquelleAutor 3h3