2011-06-30 13 views
6

Aşağıdaki etkinlik düzgün çalışıyor ancak mediaController sadece ekranı tıklatıyorsa görüntülenir. Ve ikinci sorun, medya kontrolörü sadece 3 sn. Bu sorunu gidermek için ne yapmalıyım?Android ortam denetleyicisi kısa bir süre için gösteriliyor

public class PlayingActivity extends Activity 
{ 

    private VideoView mVideoView; 
    private EditText mPath; 
    MediaController mediaController; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.playingactivity); 
     mPath = (EditText) findViewById(R.id.path); 
     mPath.setText(GlobalVariable.getstrEmail()); 
     mVideoView = (VideoView) findViewById(R.id.surface_view); 
     Uri uri = Uri.parse("/sdcard/download/test.mp3"); 
     mediaController = new MediaController(this); 
     mediaController.findFocus(); 
     mediaController.setEnabled(true); 
     mediaController.show(0); 
     mediaController.setAnchorView(mVideoView); 
     mVideoView.setMediaController(mediaController); 
     mVideoView.setVideoURI(uri); 
     mVideoView.start(); 
    } 
} 
+0

Ne sonucu istiyorsunuz? MediaController her zaman ekranda görüntülenir? – Judy

+0

evet her zaman mp3 dosyası bitirmek istiyorum – Android

+0

Android geliştirin bir not var doc geliştir: public void show (int zaman aşımı) Ben android 1.5 başarıyla "show (0)" kullanabilirsiniz hatırlıyorum. Ben sadece android 2.3 denemek, sonuç seninle aynı. Bu davayı anlamıyorum. Belki de mp3 süresini mediaController zaman aşımına ayarlayabilirsiniz. Kontrol ünitesini ekranda gösterin. 'Zaman aşımı' milisaniyesinde kullanılmadığında otomatik olarak kapanacaktır. Parametreler zaman aşımı \t Zaman aşımı milisaniye cinsinden. Gizle() çağrılana kadar denetleyiciyi göstermek için 0 kullanın. – Judy

cevap

18
mediaController.requestFocus(); 

ve

mVideoView.setOnPreparedListener(new OnPreparedListener() { 

      @Override 
      public void onPrepared(MediaPlayer mp) { 
       mediaController.show(0); 
      } 
     }); 

ekranda tutacak (tıklama gerektirmeden) olabildiğince kısa video başlatma olarak gösterilecek yapacaktır. Umut,

1

Neo'un önerileri mükemmel. Ancak, medya dosyasının oynatılmaya başlayamayacağı onPrepared (MediaPlayer mp) yöntemine "mp.start()" ifadesini eklemek istiyorum.

0

Odaklama isteği veya gösterme yönteminde 0 belirtme, benim için hiç çalışmadı.

Sorun, MediaController sınıfının varsayılan zaman aşımı 3000ms veya 3seconds olmasıdır. Ve onun show() yöntemi, bizim verilen parametreyi varsayılan parametresine değiştirir. Google'da test edilmemiş koddan kaynaklanan aptal bir böcek.

Varsayılan değeri istenen değere değiştirmek için kötü bir geçici çözüm uygulamamız gerekiyor.

Aşağıdaki kodu deneyin. İşe yaramalı.

mediaControls = new MediaController(getActivity()){ 
     @Override 
     public void show (int timeout){ 
      if(timeout == 3000) timeout = 20000; //Set to desired number 
      super.show(timeout); 
     } 
    }; 
mVideoView.setMediaController(mediaControls); 
0

MediaController iki temel sorun vardır:

  1. otomatik gizleme Video şovlarda dokunulduğunda varsayılan
  2. tarafından 3s olduğu/ilk bölümü için kontrol çubuğunu

gizlemek 0'dan başlayarak varsayılan zaman aşımı değerini sıfırdan (sıfırın belirsiz olduğu anlamına gelir, video olarak dahili olarak kullanılır) bu şekilde düzeltildi:

mediaController = new MediaController(this){ 
      @Override 
      public void show() { 
       super.show(0);//Default no auto hide timeout 
      } 
    }; 

İkinci sorun biraz zor, çünkü tıklama işleyicisi özel ve kesin olarak bildirildiğinden, bunun üzerinde herhangi bir denetimimiz yoktur.

: görünürlük şöyle false olarak ayarlanır durumunda da standart işlevselliği yeniden etkinleştirmek için bir değişken ekleyebilir

mediaController = new MediaController(this){ 

      @Override 
      public void show() { 
       super.show(0);//Default no auto hide timeout 
      } 
      @Override 
      public void hide() { 
        //DOES NOTHING 
      } 

      void setVisible(boolean visible){//USE THIS FUNCTION INSTEAD 
       if(visible) 
        super.show(); 
       else 
        super.hide(); 
      } 
    }; 

: Çözümümün görünürlüğü ve bunun gibi gizlemek işlevini devre dışı bırakmak için başka bir fonksiyon kullanmaktır

mediaController = new MediaController(this){ 
       private boolean forceVisible=false; 

       @Override 
       public void show() { 
        super.show(0);//Default no auto hide timeout 
       } 
       @Override 
       public void hide() { 
        if(!forceVisible)super.hide(); 
       } 

       void setVisible(boolean visible){ 
        forceVisible=visible; 
        if(visible) 
         super.show(); 
        else 
         super.hide(); 
       } 
     }; 
İlgili konular