2012-02-01 3 views
2

У меня есть videoView, где я показываю видео, и я хочу показать медиа-контроллеры по умолчанию. По какой-то причине контроллеры, похоже, не хотят появляться.Android - Контроллер СМИ не отображается

Я попытался создать MediaController с помощью xml, установив его всегда видимым, прикрепляя его к медиаплееру с помощью mMediaController.setMediaPlayer(mVideoView), но ничего не работает.

Я использую классический код видео плеер от Google, который можно найти здесь: 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 находится, и у меня есть его с красным фоном, чтобы он был как можно более заметным. Ничего не видно, хотя в этом регионе. У кого-нибудь есть рабочий пример добавленного вручную медиаконтроллера? Может быть, деятельность должна быть конкретной, возможно? Или что-то происходит с видео, и он всегда находится перед медиа-контроллером? –

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

Точный же фрагмент кода для меня не работает. Параметры макета установки для Media Controller не работают. Set Enabled, не помогло. Вызов show() тоже не помог. Довольно расстраивает. – AndroidRocks

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(); 
      } 
     }); 
Смежные вопросы