Не удается получить VIdeoView для перемешивания - PullRequest
0 голосов
/ 05 февраля 2012

У меня есть видеовид в Android, который читает строки из текстового файла и воспроизводит их. Текстовый файл содержит ссылки на аудио и видео файлы на веб-сервере. Однако, когда он достигает конца песни / видео, он не будет воспроизводить следующий.

Кажется, мне нужно реализовать OnCompletionListener, но я понятия не имею, как это сделать. Это будет правильный путь, чтобы идти вниз?

Я пытался поместить его в цикл, чтобы выполнить метод воспроизведения X раз, но он просто зависает. Я предполагаю, что он просто постоянно перемешивается, пока не достигнет конца цикла.

Я также попытался приостановить воспроизведение аудио / видео дорожки с помощью videoVIew.getDuration()

Код ниже:

try {
         BufferedReader br = new BufferedReader(new InputStreamReader(new DataInputStream(new FileInputStream(file))));
         LineNumberReader rdr = new LineNumberReader(br);

          int min = 1; //Line 1 (start of file)
          int max = 20; // Line 20 (end of file)
          Random r = new Random();
          int someRandomNo = r.nextInt(max - min + 1) + min; 
          textView1.setText(Integer.toString(someRandomNo));
          // get random number - go to line - save it
          rdr.setLineNumber(someRandomNo);
          int linenum = 0;
          String theLine = "";
          while (linenum < someRandomNo) {
              theLine = br.readLine();
              linenum++;
          }
          textView1.setText(theLine);

              VideoView videoView = (VideoView) findViewById(R.id.VideoView);         
              MediaController mediaController = new MediaController(this);
              mediaController.setAnchorView(videoView);
      // Set Audio/Video to play
              Uri video = Uri.parse(theLine);
              videoView.setMediaController(mediaController);
              videoView.setVideoURI(video);
              videoView.start();                                      
      }
      catch (Exception e) {

      }

Ответы [ 2 ]

1 голос
/ 05 февраля 2012

Это то, что вы хотите:

viedoView.setOnCompletionListener(MediaPlayer.OnCompletionListener l);

И ресурс onCompletionListener на android dev- http://developer.android.com/reference/android/media/MediaPlayer.OnCompletionListener.html

И для чего бы это ни стоило, я бы посоветовал вам сделать IO с файлом один раз и сохранить theLine в массиве или ArrayList, чтобы вы могли получить к нему доступ, или даже создать собственный класс для обработки тасования. Например, вы можете отслеживать, какие строки были отправлены, т.е. какие видео были воспроизведены, а затем случайным образом выбрать новую, которая еще не была воспроизведена.

0 голосов
/ 05 февраля 2012

Ответ AJcodez был тем, что мне было нужно, я просто не знал, как использовать слушатель OnCompletion.

Я поместил свой код OnCreate в его собственный метод, а затем просто заставлял слушателя вызывать его каждый раз.Я также не реализовывал MediaPayer.OnCompletition Listener для класса.

//Implement the listener
public class CardioActivity extends Activity implements MediaPlayer.OnCompletionListener {

//Oncreate calls play
 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);   
        play();
}

 public void play() {
                    //Blah blah all other code is here
                    //Set the listener etc like this
                videoView.setMediaController(mediaController);
                videoView.setVideoURI(video);
                videoView.setOnCompletionListener(this);                    
                videoView.start();              
        }
        catch (Exception e) {
         //Handling exceptions
        }
    }

@Override
public void onCompletion(MediaPlayer arg0) {
    //Recall the method
    play();
}

Еще одна SO-ссылка, с которой я столкнулся

...