7

tôi đã thiết lập:Android: Media Player Thời gian phát hành

mSeekBar.setMax(mp.getDuration()); // 8480 

Sau khi hoàn thành Audiofile, Những gì tôi nhận được là:

player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
        public void onCompletion(MediaPlayer mediaPlayer) 
        { 
         Log.e("onComplete>>", ""+mediaPlayer.getCurrentPosition()); 

         // mediaPlayer.getCurrentPosition() = 8192 

         Log.e("getDuration", ""+mediaPlayer.getDuration()); 

         // mediaPlayer.getDuration() = 8480 

         if(mediaPlayer.getCurrentPosition()>=mediaPlayer.getDuration()) 
         { 
          // Why never get called??? 
         } 
        } 
       }); 

Vì vậy, Tại sao vị trí hiện tại MediaPlayer không bao giờ đạt tổng số thời gian của tệp Audio?

Hoặc về mặt kỹ thuật chúng ta có thể nói như sau:

Why Not?

mediaPlayer.getCurrentPosition()==mediaPlayer.getDuration() 

Tại sao Luôn

mediaPlayer.getCurrentPosition() < mediaPlayer.getDuration() trong OnCompletion người nghe?

Ví dụ:

Tôi có một Chơi Symbol để tiến hành khởi Player. Bây giờ, khi tôi nhấn phát biểu tượng nó sẽ chuyển đổi thành biểu tượng Tạm dừng.

Tôi có Maxduration của audiodfile.

Bây giờ tôi muốn chuyển đổi Tạm dừng biểu tượng đến Phát Ký hiệu khi tệp âm thanh được phát hoàn toàn. SO những gì tôi đang làm là kiểm tra:

if(mediaPlayer.getCurrentPosition()>=mediaPlayer.getDuration()) 
{ 
     // Convert Imagview from Pause to Play  
     // But never get called     
} 
+0

đầu ra của 'Log.i là gì ("onComplete >>", "" + mediaPlayer.getCurrentPosition()); Log.i ("getDuration", "" + mediaPlayer.getDuration()); ' –

+0

vị trí hiện tại luôn nhỏ hơn GetDuration. –

+1

Hmm .. Tôi tìm thấy một [vấn đề thread] (https://code.google.com/p/android/issues/detail?id=38627) cho cùng, nhưng không biết nếu có ai tìm thấy giải pháp hoặc giải thích nào được nêu ra. và [this] (http://www.anddev.org/multimedia-problems-f28/mediaplayer-getcurrentposition-t20032.html), là tốt. –

Trả lời

0

Nếu bạn cần phải làm một số nhiệm vụ trên các dữ liệu bằng cách kiểm tra currentPoision tới thời gian, bạn có thể làm dưới đây lừa:

if(mediaPlayer.getDuration()-mediaPlayer.getCurrentPosition()<1000){//milliseconds 
    new Handler().postDelayed(
    new Runnable() { 
     @Override 
     public void run() { 
      // Convert Imageview from Pause to Play  
     } 
    },1000); 
} 
Các vấn đề liên quan