Définir un Écouteur dans un Service de Classe en fonction de
Hy j'ai un problème pour définir la ServiceUpdateUIListener dans le service de mise à jour de l'INTERFACE utilisateur. C'est mal de faire un nouvel objet de Service et y placer l'auditeur et de le mettre dans une intention.
Code source est http://developerlife.com/tutorials/?p=356 là, je ne trouve pas comment le jeu de l'auditeur et de démarrer le service de droit.
Appel:
TimerService service = new TimerService();
TimerService.setUpdateListener(new ServiceUpdateUIListener() {
@Override
public void updateUI(String time) {
clock.setText(time);
}
});
Intent i = new Intent(Timer.this,service.class); //service cannot be resolved to a type
i.putExtra("ms", ms);
startService(i);
Service:
public class TimerService extends Service{
CountDownTimer timer;
Chronometer clock;
public static ServiceUpdateUIListener UI_UPDATE_LISTENER;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onStart(Intent intent, int startId) {
//TODO Auto-generated method stub
int ms = intent.getIntExtra("ms", 0);
timer = new CountDownTimer(ms,1000){
@Override
public void onTick(long millisUntilFinished) {
int seconds = (int) (millisUntilFinished / 1000) % 60 ;
int minutes = (int) ((millisUntilFinished / (1000*60)) % 60);
int hours = (int) ((millisUntilFinished / (1000*60*60)) % 24);
clock.setText( String.format("%02d:%02d:%02d", hours,minutes,seconds));
Log.e("Timer", String.valueOf(millisUntilFinished));
}
@Override
public void onFinish() {
//TODO Auto-generated method stub
}
}.start();
super.onStart(intent, startId);
}
public static void setUpdateListener(ServiceUpdateUIListener l) {
UI_UPDATE_LISTENER = l;
}
La Question n'est pas très clair, pouvez-vous expliquer plus...!
OriginalL'auteur test123123 | 2011-10-05
Vous devez vous connecter pour publier un commentaire.
Le Service de la documentation est assez complet exemple de code pour la mise en œuvre d'un service dans votre application, qu'une autre partie de votre application peuvent se lier et de faire des appels sur:
http://developer.android.com/reference/android/app/Service.html#LocalServiceSample
Il suffit de mettre votre setUpdateListener() la méthode sur le Service, et de l'appeler une fois que vous obtenez onServiceConnected() avec le service.
De sorte que votre code serait quelque chose comme ceci:
Maintenant, vous pouvez démarrer le service de l'obtenir pour commencer à compter, et n'importe qui peut se lier à elle pour enregistrer un écouteur pour recevoir des rappels comme il le faut.
C'est vraiment si dur que pour répondre à votre question très bien parce que vous n'êtes pas vraiment dire ce que vous voulez vraiment accomplir. Il y a beaucoup de façons d'utiliser les services, de départ ou de liaison ou de mélanger les deux ensemble, selon exactement ce que vous voulez accomplir.
Maintenant, vous pouvez mettre en œuvre votre code client sur la base de l'échantillon:
OriginalL'auteur hackbod
Je ne sais pas exactement ce que vous voulez, mais ce n'est pas la façon de le faire. Il semble que vous avez mélangé à beaucoup de choses.
Le tutoriel en lui-même est un mauvais exemple à mon avis, en gardant une référence statique à une activité dans un service me semble une mauvaise pratique; vous utilisez la liaison pour lier votre service pour une activité, ou si vous ne voulez pas vous pouvez passer des Intentions de autour de.
Autant que je sache, l'instanciation d'un service comme vous le faites et la fixation d'un auditeur sur elle comme cela ne fonctionne pas. Vous obtenez une erreur dans la startService() appel de la cause à l'instance de service n'est pas une classe, évidemment; vous devez utiliser
TimerService.class
à la place. Dans votre service, vous avez une onStart(); onStart() est une fonction obsolète, vous devez utiliser onStartCommand() à la place.Maintenant, si vous avez une activité dans laquelle vous souhaitez afficher une horloge que vous n'avez pas besoin ni voulez que le service de mise à jour de son INTERFACE utilisateur directement, bien sûr, mais si vous voulez que le service de calculer une nouvelle horloge pour vous, il suffit d'appeler startService(); tant Que votre service est vivant, l'envoi d'un nouveau service de démarrage intention suffit d'appeler le onStartCommand() avec l'intention que vous envoyez.
Si votre horloge est dans une activité, l'installation d'un récepteur de radiodiffusion à l'intérieur de votre activité et laissez votre service de diffusion d'une intention qui peut être reçu par le récepteur de radiodiffusion-vous de l'installation, avec votre nouvelle horloge de la valeur transmise.
OriginalL'auteur MrJre
MrJre est exact que le démarrage est déprécié et que vous devriez être en utilisant onStartCommand().
Si vous voulez obtenir que cela fonctionne, il y a une meilleure façon.
Je suis en train de faire quelque chose de similaire, en voulant mettre à jour d'une INTERFACE à partir des résultats qui se passe dans un service. Ce n'était pas particulièrement facile. (À mon avis)
Voici comment faire: tout d'Abord la ferraille votre code existant)
Dans l'INTERFACE utilisateur de la classe d'ajouter:
Service Du Fichier:
Il pourrait y avoir quelques erreurs de syntaxe dans le présent code, j'ai juste modifié mon travail et code de l'essayer et de l'adapter à vos besoins. Il y aura évidemment besoin d'être aussi quelques modifications en fonction de ce que vous voulez faire. Mais ce cadre et vous serez en mesure de faire ce que vous essayez de faire.
Cela fonctionne pour moi, donc j'espère que vous pouvez modifier cela fonctionne pour vous. (Seule chose que j'ai laissé de côté sont les importations, mais vous devriez être capable de facilement trouver)
Points clés:
Acclamations.
OriginalL'auteur Dave