2011-06-30 20 views
6

以下活動可以正常工作,但mediaController僅在單擊屏幕時顯示。第二個問題是媒體控制器顯示只有3秒。我應該怎麼做才能消除這個問題?Android媒體控制器顯示短時間顯示

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

你想要什麼結果? mediaController始終顯示在屏幕上? – Judy

+0

是的,我希望它總是達到MP3文件完成 – Android

+0

有一個來自Android開發文檔說明:public void show(int timeout)我記得我可以在android 1.5中成功使用「show(0)」。我只是嘗試在android 2.3中,結果與你一樣。我不明白這個情況。也許你可以將mp3的持續時間設置爲mediaController超時。 在屏幕上顯示控制器。它會在「超時」毫秒的不活動狀態後自動消失。 參數 timeout \t以毫秒爲單位的超時時間。使用0顯示控制器,直到調用hide()。 – Judy

回答

18
mediaController.requestFocus(); 

將使其儘快啓動視頻顯示(無需點擊)

mVideoView.setOnPreparedListener(new OnPreparedListener() { 

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

將保持在屏幕上。 希望它有幫助

1

Neo的建議是完美的。但是我想將「mp.start()」添加到onPrepared(MediaPlayer mp)方法中,否則媒體文件將無法播放。

0

在show方法中請求焦點或指定0從來沒有爲我工作過。

問題是MediaController類的默認超時時間爲3000毫秒或3秒。它的show()方法將我們給定的參數替換爲其默認參數。它是由谷歌未經測試的代碼導致的一個愚蠢的錯誤。

我們需要實現一個糟糕的解決方法,用所需的值替換默認值。

嘗試下面的代碼。它應該工作。

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:

  1. 自動隱藏默認情況下
  2. 輕敲錄像顯示3秒/隱藏控制欄

對於第一部分它很容易修復,將默認的開始超時值更改爲零(零意味着無限期,它在視頻啓動時在內部使用),如下所示:

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

第二個問題是有點棘手,因爲點擊處理程序被聲明爲private和final,所以我們沒有任何控制權。 我的解決辦法是使用另一個函數來設置的知名度和禁用隱藏功能是這樣的:

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

您還可以添加一個變量來重新啓用標準功能,如果能見度設置爲false,像這樣:

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