2010-09-20 7 views
1

Dans mon application android, je joue des vidéos en utilisant la vue vidéo. Lorsque la vidéo est téléchargée, je montre une boîte de dialogue de progression.Ignorer le dialogue de progression dans android

Lorsque le streaming n'est pas pris en charge ou en cas d'erreur, un message d'erreur s'affiche à l'écran. Après le clic OK du message d'erreur, le dialogue de progression affiche à nouveau le message et essaie de télécharger.

Mais je voudrais rejeter ce dialogue en cas de messgae d'erreur et que dès que l'utilisateur clique sur OK et revenir au lecteur vidéo

afin que l'utilisateur peut passer par la vidéo suivante ou précédente.

private ProgressDialog mProgressDialog; 
Handler myUiHandler = new Handler(); 
     boolean m_prgisShowing = false; 
     private static final int DIALOG_100 = 0; 
     ProgressDialog mDialog2; 

    mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
        public void onPrepared(MediaPlayer mp) { 
         Log.i("Manju", "OnPrepared"); 
         myUiHandler.post(myDilgDismis); 
         mVideoView.start(); 



     protected Dialog onCreateDialog(int id) { 
      switch (id) { 
      case DIALOG_100: { 
       mDialog2 = new ProgressDialog(this); 
       mDialog2.setMessage("buffering..."); 
       mDialog2.setIndeterminate(true); 
       mDialog2.setCancelable(true); 

       return mDialog2; 
      } 
      } 
      return null; 
     } 



     Runnable myDilgShow = new Runnable() { 
      public void run() { 
       show_My_Dialog(); 
      } 
     }; 
     Runnable myDilgDismis = new Runnable() { 
      public void run() { 
       dismiss_My_Dialog(); 
      } 
     }; 

     public void show_My_Dialog() { 
      m_prgisShowing = true; 
      showDialog(DIALOG_100); 
     } 

     public void dismiss_My_Dialog() { 
      if (m_prgisShowing) { 

       try { 
        if (null != mDialog2) { 
         mDialog2.dismiss(); 
        } 
       } catch (Exception e) { 
        e.printStackTrace(); 
        m_prgisShowing = false; 
       } 
      } 
      m_prgisShowing = false; 
     } 

Veuillez partager vos précieuses suggestions.

Merci à l'avance

Répondre

1

Je suppose que vous utilisez AsyncTask pour le filetage, dans ce cas pour le streaming ou le téléchargement. Ensuite, vous avez implémenté la fonction

onProgressUpdate 

. Dans cette fonction, vous mettez à jour la boîte de dialogue de progression pour afficher l'état de diffusion en cours. Pour fermer la boîte de dialogue de progression, vous devez définir sa visibilité sur false ou la supprimer complètement de la mise en page. Dans onProgressUpdate, vous avez besoin d'une instruction if ou de quelque chose de similaire pour intercepter l'erreur et fermer la boîte de dialogue.

EDIT:

Le code montre que utiliser l'interface runnable pour mettre en œuvre les threads, ce qui est bon pour le développement Java de base. Mais Android SDK a une solution spécialement pour le développement Android appelé tâche asynchrone. Il est recommandé de l'utiliser.

E.g. vous pouvez ajouter une classe privée à votre fichier java principal où se trouve la méthode oncreate.

private class MediaPlayer extends AsyncTask<Params, Progress, Result> { 

} 

a. Params: le type des paramètres envoyés à la tâche lors de l'exécution.

b. Progression: le type des unités de progression publiées lors du calcul de l'arrière-plan.

c. Résultat: le type du résultat du calcul de l'arrière-plan. Toutes les tâches asynchrones implémente les méthodes suivantes:

4 étapes qu'un AsyncTask passera:

a. OnPreExecute() - sur invoquaient thread d'interface utilisateur immédiatement

-> Appelé avant le calcul de fond commence

-> Est-ce une configuration (par exemple, afficher une boîte de dialogue de progression)

b. doInBackground (Params ...) - invoqué sur le fil de fond

-> Appelé immédiatement après OnPreExecute()

-> Effectuer le calcul en fil d'arrière-plan qui peut prendre beaucoup de temps.

-> Utiliser publishProgress (Progress ...) pour déclencher l'interface utilisateur mise à jour des progrès

-> Les progrès seront transmis à onProgressUpdate (Progress ...)

c. onProgressUpdate (Progress ...) - a invoqué le thread d'interface utilisateur

-> Mise à jour des progrès

d. onPostExecute (Résultat) - invoqué le thread d'interface utilisateur

-> Appelée après le calcul de fond se termine

-> Le résultat sera passé de doInBackground (Params ...)

Comment commencer AsyncTask ?

new MyTask().execute(param1, param2, param3); 

Ceci est un petit aperçu. Je vous recommande fortement de lire le doc.

+0

Bonjour ArtWork je colle mon code ici. Pourriez-vous me dire où je dois changer? – Remmyabhavan

+0

Je ne recommanderais pas d'utiliser thread ou runnable de cette manière. Pourquoi? Lisez-le ici, Threading Painless http://android-developers.blogspot.com/2009/05/painless-threading.html. Utiliser AsyncTask –

Questions connexes