2011-05-21 4 views
0

je veux faire le code pour chanson devrait jouer pendant 5 secondes seulement après 5 secondes joueur devrait arrêter le jeu de la chanson. J'utilise AsyncTask de la manière suivante il ne s'arrête pas après 5 secondes et je ne sais pas où écrire le code pour le code d'arrêt du joueur dans ce qui suit. le codage task.execute juste retardé de 5 secondes pour démarrer l'activité. Aidez-moi, s'il vous plaît. dans le lecteur suivant joue la chanson mais ne s'arrête pas. mon code:problème de tâche asynchrone dans android

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    text=(TextView)findViewById(R.id.text);  
    AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() { 
     @Override 
     protected Void doInBackground(Void... params) { 
      Log.e("bpm", "in run method"); 
      processor = new BPM2SampleProcessor(); 
      processor.setSampleSize(1024); 
      EnergyOutputAudioDevice output = new EnergyOutputAudioDevice(processor);  
      output.setAverageLength(1024); 
      try { 
       player = new Player(new FileInputStream("/sdcard/taxi.mp3"), output); 
       player.play(); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } catch (JavaLayerException e) { 
       e.printStackTrace(); 
      } 
      Log.e("bpm"," bpm is "+processor.getBPM());    
      return null; 
     }   
     protected void onProgressUpdate(Void... params) 
     { 
      text.setText("bpm is "+processor.getBPM()); 
     }    
    }; 
    try {   
     task.execute((Void)null).get(5, TimeUnit.SECONDS); 
     player.close(); 
    } catch(Exception e) { 
     e.printStackTrace(); 
    }  
} 

Répondre

0

Vous ne devriez pas être le joueur rapprochaient après avoir défini cette tâche. Au lieu de cela, player.close() doit être appelée 5 secondes après la création de la tâche. Cela peut être fait en utilisant un objet Handler pour publier un objet Runnable dans votre implémentation de doInBackground() qui arrête le lecteur.

Questions connexes