2012-06-25 29 views
17

Có thể lấy tham chiếu đến cá thể mediaPlayer mà videoView đang sử dụng hay không, tốt nhất là bên trong ctor của nó? Nếu vậy, làm thế nào?Nhận mediaPlayer của videoXem trong Android

Vì videoView không có nhiều người nghe như mediaPlayer, tôi muốn có khả năng tiếp cận mediaPlayer để kiểm soát thêm và xử lý sự kiện tốt hơn.

+0

Bạn có thể làm điều đó thông qua [phản ánh] (http://tutorials.jenkov.com/java-reflection/private-fields-and-methods.html). – yorkw

+0

phản ánh quá lộn xộn và quá nguy hiểm. có thể mở rộng videoView và nhận mediaPlayer ở đó không? –

Trả lời

12

bạn có thể nghe từ VideoView.

VideoView mVideoView=new VideoView(); 
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
    @Override 
    public void onPrepared(MediaPlayer pMp) { 
    //use a global variable to get the object 
    } 
}); 

Hoặc nếu bạn chỉ quan tâm đến sự kiện Trình phát phương tiện, bạn có thể sử dụng bất kỳ điều này và chúng được triển khai trên VideoView và đây là những sự kiện cơ bản của MediaPlayer.

void setOnCompletionListener(MediaPlayer.OnCompletionListener l) 
void setOnErrorListener(MediaPlayer.OnErrorListener l) 
void setOnInfoListener(MediaPlayer.OnInfoListener l) 
void setOnPreparedListener(MediaPlayer.OnPreparedListener l) 

Tất cả các chức năng này cũng sẽ cung cấp cho trường hợp Trình phát Media.

+0

mặc dù tôi đã hỏi câu hỏi này từ lâu, tôi nhớ những gì tôi muốn: rất nhiều kiểm soát và được thông báo về tất cả các sự kiện trong chế độ xem này: sự kiện phát lại trạng thái (tạm dừng, bắt đầu, dừng, tìm kiếm), sự kiện lỗi, trạng thái đệm, v.v. mediaPlayer có tất cả (mặc dù không chắc chắn chúng hoạt động tốt như thế nào), nhưng videoView chỉ có một số. –

+0

Sự kiện trên VideoView (ví dụ: setOnInfoListener (MediaPlayer.OnInfoListener l)) chỉ khả dụng ở cấp API 17, vậy nếu tôi muốn hỗ trợ các cấp API thấp hơn thì sao? –

+0

Bạn có thể đặtOnInfoListener của đối tượng MediaPlayer được tìm thấy. Có sẵn> API 3. –