2012-02-01 71 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(); 
      } 
     });