2012-02-01 70 views
2

我有一個videoView,我顯示一個視頻,我想顯示默認媒體控制器。出於某種原因,控制器似乎不想出現。Android - 媒體控制器不顯示

我曾嘗試使用XML創建的MediaController,將其設定爲始終可見,它與mMediaController.setMediaPlayer(mVideoView)連接到媒體播放器,但似乎沒有任何工作。

我使用從谷歌經典視頻播放器代碼可以在這裏找到:http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo_Video.html

什麼能發生?聽衆是否失去了這個事件?它沒有附加到實際的視頻播放?我應該添加一些其他的代碼,我正在使用(見下文)?

public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.activity_content_video); 

    [...] 

    mVideoView = (VideoView) findViewById(R.id.surface); 
    mainVideoHolder = (LinearLayout) findViewById(R.id.main_video_holder); 


    holder = mVideoView.getHolder(); 
    holder.addCallback(this); 

    mMediaController = new MediaController(this); 

    mMediaController.show(); 
} 



private void playVideo() { 
    doCleanUp(); 
    try { 
     mMediaPlayer = new MediaPlayer(); 
     Log.d(tag, "surfaceCreated"); 
     File f = new File(mAssetsPath); 
     File[] files = f.listFiles(); 
     Log.d(tag, "File: " + files[0].toString()); 

     URI uri = URI.create("file://" + (files[0].toString())); 
     File file = new File(uri); 
     ParcelFileDescriptor parcel = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_WRITE); 
     mMediaPlayer.setDataSource(parcel.getFileDescriptor()); 

     mMediaPlayer.setDisplay(holder); 

     mMediaPlayer.prepare(); 

     mMediaPlayer.setOnBufferingUpdateListener(this); 
     mMediaPlayer.setOnCompletionListener(this); 
     mMediaPlayer.setOnPreparedListener(this); 
     mMediaPlayer.setOnVideoSizeChangedListener(this); 

     mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 

     mMediaController.setMediaPlayer(mVideoView); 

     mVideoView.setMediaController(mMediaController); 
    } catch (Exception e) { 
     Log.e(tag, "error: " + e.getMessage(), e); 
    } 
} 


public void surfaceCreated(SurfaceHolder holder) { 
    Log.d(tag, "surfaceCreated called"); 
    playVideo(); 
} 

任何想法將不勝感激?

在活動中沒有應用主題,並且視頻通常沒有任何錯誤地播放。這只是媒體控制器不顯示!

謝謝。

回答

0

你在哪裏添加控制器到佈局?還要確保容器足夠大。給它一個背景,看它在添加視頻控制器之前是否在屏幕上顯示。

+0

我將它添加到相對佈局的底部videoView是在,我有紅色背景,所以它儘可能可見。雖然在這個地區沒有出現。有沒有人有手動添加媒體控制器的工作示例?也許活動必須是特定的?或者視頻正在發生什麼,它總是在媒體控制器的前面? – 2012-02-02 10:16:22

0

我不確定這個答案有點遲,但也許別人有這個問題。數獨說同胞:

使用此類的方法是以編程方式實例化它。 MediaController將創建一組默認的控件,並將它們放在應用程序上方的一個窗口中。具體來說,控件將浮動在用setAnchorView()指定的視圖之上。如果空閒三秒鐘,該窗口將消失,並在用戶觸摸錨點視圖時重新出現。

所以,你可以做這樣的(MediaPlayer正在在這種情況下VideoView:

VideoView videoView = (VideoView) findViewById(R.id.videoView); 
videoView.setVideoPath(uri); 
MediaController controller = new MediaController(this); 
controller.setAnchorView(videoView); 
controller.setMediaPlayer(videoView); 
videoView.setMediaController(controller); 
videoView.start(); 

這爲我工作

+1

完全相同的代碼段不適合我。媒體控制器的設置佈局參數不起作用。設置啓用,沒有幫助。調用show()也沒有幫助。相當令人沮喪。 – AndroidRocks 2014-01-13 15:05:06

0
this work for me: 

    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.main); 

     getWindow().setFormat(PixelFormat.UNKNOWN); 

     mVideoView = (VideoView)findViewById(R.id.videoview); 
     mc = new MediaController(this){ 
      @Override 
      public void hide() {} //dont hide control 
     }; 

     new MyDelay2().execute(""); 
    } 

    private class MyDelay2 extends AsyncTask<String,Void,String>{ 

     @Override 
     protected String doInBackground(String... params) {     
      Uri uri2 = Uri.parse("android.resource://com.blah/"+R.raw.cool); 
      mVideoView.setVideoURI(uri2); 
      return null; 
     } 


     @Override 
     protected void onPostExecute(String result) { 
      dialog.dismiss(); 
      mc.setAnchorView(mVideoView); 
      mc.setMediaPlayer(mVideoView); 
      mc.setEnabled(true); 
      mVideoView.setMediaController(mc);  

      mc.show(); 
     }  
    } 
1

嘗試我所能,在後下面的代碼爲我工作!

 mVideoView = (VideoView) findViewById(R.id.video); 

     mMediaController = new MediaController(this) { 
      //for not hiding 
      @Override 
      public void hide() {} 

      //for 'back' key action 
      @Override 
      public boolean dispatchKeyEvent(KeyEvent event) { 
       if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) { 
        Activity a = (Activity)getContext(); 
        a.finish(); 
       } 
       return true; 
      } 
     }; 

     mMediaController.setAnchorView(mVideoView); 
     mMediaController.setMediaPlayer(mVideoView); 
     mVideoView.setMediaController(mMediaController); 
     mMediaController.requestFocus(); 

     //only this showed the controller for me!! 
     mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
      @Override 
      public void onPrepared(MediaPlayer mp) { 
       mVideoView.start(); 
       mMediaController.show(900000000); 
      } 
     }); 

     //finish after playing 
     mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
      @Override 
      public void onCompletion(MediaPlayer mediaPlayer) { 
       finish(); 
      } 
     });