2012-02-04 2 views
0

私は、テキストファイルから行を読み込んで再生しているアンドロイドのビデオビューを持っています。テキストファイルには、Webサーバー上のオーディオおよびビデオファイルへのリンクが含まれています。しかし、それが曲/ビデオの最後に到達すると、次の曲は再生されません。VIdeoViewをシャッフルできない

OnCompletionListenerを実装する必要があるようですが、どうすればいいのかわかりません。それが正しい道になるのでしょうか?

再生方法Xを実行するためにループに入れてみましたが、ちょうどハングします。私はそれがループの終わりに達するまでランダムにシャッフルし続けると仮定しています。

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) { 

     } 

答えて

1

これは何をしたいです:

は、私はまた、以下である videoVIew.getDuration()

コードを使用することによって、それは、オーディオ/ビデオトラックの長さのために一時停止するために取得しようとしてきました

viedoView.setOnCompletionListener(MediaPlayer.OnCompletionListener l); 

androidのonCompletionListenerリソースhttp://developer.android.com/reference/android/media/MediaPlayer.OnCompletionListener.html

そして、その価値については、IOをファイルで一度行い、配列やArrayListにtheLineを保存することをお勧めします。そうすれば、アクセスすることも、シャッフルを処理するカスタムクラスを作成することもできます。たとえば、どの文字列が送られたか、つまり再生されたビデオを追跡しておき、まだ再生されていない新しい文字列をランダムに選択することができます。

+0

おかげで、 – sealz

0

私が必要としていた答えは、私はOnCompletion Listenerの使い方が分かりませんでした。

自分のOnCreateコードを独自のメソッドに入れて、毎回リスナーに呼び出すようにしました。私はクラスのためのリスナーMediaPayer.OnCompletitionも実装していませんでした。以降になるだろう提案を

//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(); 
} 

Another SO link that I came across

関連する問題