Android Toast a commencé à partir de l'affichage Service uniquement une fois

J'ai un service qui surveille une connexion socket. Lorsque la connexion est perdue, il doit afficher un Toast informant l'utilisateur qu'il se reconnecte. Cela fonctionne bien la première fois. Après cela, je vois l'enqueueToast dans le journal, mais le toast n'est pas affiché. Toutes les idées sont appréciées. Je pensais que ce serait une chose facile à ajouter, mais je dois manquer quelque chose.

Entrée de journal

  • Comparaison de chaînes sur la liaison de données Android
  • Onglets de barre d'action à l'aide de ViewPager avec tiroir de navigation
  • Impossible d'obtenir le numéro de version ADT requis du SDK
  • TextView - comment faire la deuxième ligne indentée
  • Java ne reconnaît pas l'identification des éléments XML d'Android
  • Android - Impossible de trouver le style 'mapViewStyle' dans le thème actuel
  • INFO / NotificationService (118): enqueueToast pkg = com.abc callback=android.app.ITransientNotification$Stub$Proxy@43f7b100 durée = 1

    Code qui appelle Toast

    public class ConnectionService extends Service { ..... public void restartConnection() { try { Log.i(this.toString(), "Attempting to reconnect..."); // increase the wait between each retry until the max is reached int sleepTime = reconnectCounter * MIN_RECON_WAIT; if (sleepTime > MAX_RECON_WAIT) { sleepTime = MAX_RECON_WAIT; } String msg = "The connection has been lost. Restart attempt will start in: " + sleepTime/1000 + " seconds"; Log.i(this.toString(), msg); Toast.makeText(getApplicationContext(), msg , Toast.LENGTH_LONG).show(); Thread.sleep(sleepTime); // increment the counter reconnectCounter++; this.startConnectionThread(); } catch (Exception e) { Log.e(this.toString(), "Exception: " + e.toString()); e.printStackTrace(); } }// end retartConnection 

    2 Solutions collect form web for “Android Toast a commencé à partir de l'affichage Service uniquement une fois”

    Ouais, vous pouvez aller avec RunOnUiThread, c'est une façon légitime.
    De plus, vous pouvez essayer l'alternative Handler. Quoi qu'il en soit, cela devrait fonctionner.

    Voici un code du haut de ma tête. Je n'ai pas le SDK maintenant pour le tester, mais je pense qu'il devrait vous donner une idée générale.

     public class ConnectionService extends Service { private Handler handler = new Handler(); public void restartConnection(){ int sleepTime = reconnectCounter * MIN_RECON_WAIT; if (sleepTime > MAX_RECON_WAIT) { sleepTime = MAX_RECON_WAIT; } String msg = "The connection has been lost. Restart attempt will start in: " + sleepTime/1000 + " seconds"; (new Timer()).schedule( new TimerTask() { public void run() { handler.post(new Runnable() { public void run() { Toast.makeText(getApplicationContext(), "msg", Toast.LENGTH_LONG).show(); reconnectCounter++; this.startConnectionThread() } }); } }, sleepTime); }//end restartConnection }//end ConnectionService 

    Voici la solution

    http://www.jjoe64.com/2011/09/show-toast-notification-from-service.html

    Vous devez créer un Handler dans la méthode onStartCommand . Et dans la méthode onHandleIntent , vous pouvez ensuite créer et afficher une notification de toast

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.