2011-06-30 41 views
6

Hoạt động dưới đây hoạt động tốt nhưng chỉ hiển thị MediaController nếu tôi nhấp vào màn hình. Và vấn đề thứ hai là bộ điều khiển phương tiện chỉ hiển thị trong 3 giây. Tôi nên làm gì để loại bỏ vấn đề này?Trình điều khiển phương tiện Android hiển thị hiển thị trong một thời gian ngắn

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

Bạn muốn kết quả nào? MediaController luôn được hiển thị trên màn hình? – Judy

+0

vâng tôi muốn nó luôn tối đa tập tin mp3 kết thúc – Android

+0

Có một lưu ý từ Android Develop doc: public void show (int timeout) Tôi nhớ tôi có thể sử dụng "show (0)" thành công trong android 1.5. Tôi chỉ cần thử nó trong android 2.3, kết quả là tương tự với bạn. Tôi không hiểu trường hợp này. Có thể bạn có thể đặt thời lượng của mp3 thành thời gian chờ mediaController. Hiển thị bộ điều khiển trên màn hình. Nó sẽ tự động biến mất sau 'hết thời gian' trong vài giây không hoạt động. Tham số hết giờ \t Thời gian chờ tính bằng mili giây. Sử dụng 0 để hiển thị bộ điều khiển cho đến khi hide() được gọi. – Judy

Trả lời

18
mediaController.requestFocus(); 

sẽ làm cho nó hiển thị ngay sau khi video bắt đầu (mà không yêu cầu nhấp chuột)

mVideoView.setOnPreparedListener(new OnPreparedListener() { 

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

sẽ giữ nó trên màn hình. Hy vọng điều này sẽ giúp

1

Đề xuất của Neo hoàn hảo. Nhưng tôi muốn thêm "mp.start()" vào phương thức onPrepared (MediaPlayer mp), mà không có tệp phương tiện nào sẽ không bắt đầu phát.

0

Yêu cầu lấy nét hoặc chỉ định 0 trong phương thức hiển thị không bao giờ hiệu quả đối với tôi.

Vấn đề là lớp MediaController có thời gian chờ mặc định là 3000ms hoặc 3 giây. Và phương thức show() của nó thay thế tham số đã cho của chúng ta thành tham số mặc định của nó. Đó là một lỗi ngu ngốc do mã chưa được kiểm tra tại Google.

Chúng tôi cần triển khai giải pháp thay thế giá trị mặc định bằng giá trị mong muốn.

Hãy thử mã bên dưới. Nó sẽ hoạt động.

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

có hai vấn đề chính trong MediaController:

  1. auto hide là 3s theo mặc định
  2. Khai thác trên các chương trình video/ẩn thanh điều khiển

Đối với phần đầu tiên nó dễ dàng cố định thay đổi giá trị thời gian chờ mặc định của bắt đầu bằng không (không có nghĩa là không xác định, nó được sử dụng trong nội bộ khi video bắt đầu) như sau:

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

Vấn đề thứ hai hơi rắc rối bởi vì trình xử lý nhấp chuột được khai báo là riêng tư và cuối cùng nên chúng tôi không có bất kỳ kiểm soát nào về điều đó. Giải pháp của tôi là sử dụng chức năng khác để thiết lập tầm nhìn và vô hiệu hóa ẩn chức năng như thế này:

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

Bạn cũng có thể thêm một biến để kích hoạt lại chức năng tiêu chuẩn nếu tầm nhìn được thiết lập để sai như vậy:

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(); 
       } 
     }; 
Các vấn đề liên quan