小虎周 2015-02-28 07:31 采纳率: 0%
浏览 4884

安卓MediaPlayer 得到当前时间getCurrentPosition方法不是实时

public class MainActivity extends Activity {
MediaPlayer m = new MediaPlayer();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout ll = new LinearLayout(MainActivity.this);
ll.setOrientation(LinearLayout.VERTICAL);
m.reset();
try{
String path = getRootFilePath()+"/ali/test.wav";
m.setDataSource(path);
m.prepare();
} catch (Exception e) {
System.out.println(e);
}
//ll.addView(new HuatuView(MainActivity.this,m));
setContentView(ll);
ll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
m.start();
while(true){
int currentPosition = m.getCurrentPosition();
System.out.println("位置 ----"+currentPosition+"-------"+new Date().getTime());
}
}
});

}


    结果:

02-28 14:41:52.700: I/System.out(25507): 位置 ----0-------1425105712710
02-28 14:41:52.730: I/System.out(25507): 位置 ----0-------1425105712742
02-28 14:41:52.730: I/System.out(25507): 位置 ----0-------1425105712743
02-28 14:41:52.750: I/System.out(25507): 位置 ----0-------1425105712759
02-28 14:41:52.760: I/System.out(25507): 位置 ----0-------1425105712774
02-28 14:41:52.780: I/System.out(25507): 位置 ----0-------1425105712790
02-28 14:41:52.790: I/System.out(25507): 位置 ----3277-------1425105712805
02-28 14:41:52.810: I/System.out(25507): 位置 ----3277-------1425105712820
02-28 14:41:52.830: I/System.out(25507): 位置 ----3277-------1425105712839
02-28 14:41:52.840: I/System.out(25507): 位置 ----3277-------1425105712852
02-28 14:41:52.860: I/System.out(25507): 位置 ----3277-------1425105712868
02-28 14:41:52.870: I/System.out(25507): 位置 ----3277-------1425105712883
02-28 14:41:52.900: I/System.out(25507): 位置 ----3277-------1425105712914
02-28 14:41:52.910: I/System.out(25507): 位置 ----3277-------1425105712917
02-28 14:41:52.920: I/System.out(25507): 位置 ----3277-------1425105712932
02-28 14:41:52.930: I/System.out(25507): 位置 ----3277-------1425105712943
02-28 14:41:52.950: I/System.out(25507): 位置 ----3277-------1425105712959
02-28 14:41:52.960: I/System.out(25507): 位置 ----3277-------1425105712974
02-28 14:41:52.980: I/System.out(25507): 位置 ----3277-------1425105712989
02-28 14:41:52.990: I/System.out(25507): 位置 ----3277-------1425105713005
02-28 14:41:53.010: I/System.out(25507): 位置 ----3277-------1425105713020
02-28 14:41:53.030: I/System.out(25507): 位置 ----3277-------1425105713035
02-28 14:41:53.040: I/System.out(25507): 位置 ----3277-------1425105713050
02-28 14:41:53.060: I/System.out(25507): 位置 ----3277-------1425105713067
02-28 14:41:53.070: I/System.out(25507): 位置 ----3277-------1425105713086
02-28 14:41:55.713: I/System.out(25507): 位置 ----3277-------1425105715722
02-28 14:41:55.733: I/System.out(25507): 位置 ----3277-------1425105715739
02-28 14:41:55.743: I/System.out(25507): 位置 ----3277-------1425105715752
02-28 14:41:55.763: I/System.out(25507): 位置 ----3277-------1425105715767
02-28 14:41:55.773: I/System.out(25507): 位置 ----3277-------1425105715783
02-28 14:41:55.793: I/System.out(25507): 位置 ----3277-------1425105715800
02-28 14:41:55.803: I/System.out(25507): 位置 ----3277-------1425105715813
02-28 14:41:55.823: I/System.out(25507): 位置 ----3277-------1425105715831
02-28 14:41:55.833: I/System.out(25507): 位置 ----3277-------1425105715844
02-28 14:41:55.853: I/System.out(25507): 位置 ----3277-------1425105715859
02-28 14:41:56.084: I/System.out(25507): 位置 ----6554-------1425105716090
02-28 14:41:56.094: I/System.out(25507): 位置 ----6554-------1425105716105
02-28 14:41:56.114: I/System.out(25507): 位置 ----6554-------1425105716120
02-28 14:41:56.134: I/System.out(25507): 位置 ----6554-------1425105716136
02-28 14:41:56.144: I/System.out(25507): 位置 ----6554-------1425105716151
02-28 14:41:56.164: I/System.out(25507): 位置 ----6554-------1425105716169
02-28 14:41:56.174: I/System.out(25507): 位置 ----6554-------1425105716182
02-28 14:41:56.194: I/System.out(25507): 位置 ----6554-------1425105716198
02-28 14:41:56.204: I/System.out(25507): 位置 ----6554-------1425105716212
02-28 14:41:56.224: I/System.out(25507): 位置 ----6554-------1425105716230
02-28 14:41:56.234: I/System.out(25507): 位置 ----6554-------1425105716243
02-28 14:41:56.254: I/System.out(25507): 位置 ----6554-------1425105716258
02-28 14:41:56.264: I/System.out(25507): 位置 ----6554-------1425105716274
02-28 14:41:56.284: I/System.out(25507): 位置 ----6554-------1425105716289
02-28 14:41:56.294: I/System.out(25507): 位置 ----6554-------1425105716304
02-28 14:41:56.314: I/System.out(25507): 位置 ----6554-------1425105716321
02-28 14:41:56.324: I/System.out(25507): 位置 ----6554-------1425105716335
02-28 14:41:56.344: I/System.out(25507): 位置 ----6554-------1425105716350
02-28 14:41:56.364: I/System.out(25507): 位置 ----6554-------1425105716366
02-28 14:41:56.374: I/System.out(25507): 位置 ----6554-------1425105716381
02-28 14:41:56.394: I/System.out(25507): 位置 ----6554-------1425105716398
02-28 14:41:56.404: I/System.out(25507): 位置 ----6554-------1425105716412
02-28 14:41:56.424: I/System.out(25507): 位置 ----6554-------1425105716428
02-28 14:41:56.434: I/System.out(25507): 位置 ----6554-------1425105716442
02-28 14:41:56.564: I/System.out(25507): 位置 ----6554-------1425105716568
02-28 14:41:56.574: I/System.out(25507): 位置 ----6554-------1425105716580
02-28 14:41:56.594: I/System.out(25507): 位置 ----6554-------1425105716596
02-28 14:41:56.604: I/System.out(25507): 位置 ----6554-------1425105716611
02-28 14:41:56.624: I/System.out(25507): 位置 ----6554-------1425105716628
02-28 14:41:56.634: I/System.out(25507): 位置 ----6554-------1425105716642
02-28 14:41:56.654: I/System.out(25507): 位置 ----6554-------1425105716659
02-28 14:41:56.664: I/System.out(25507): 位置 ----6554-------1425105716673
02-28 14:41:56.684: I/System.out(25507): 位置 ----6554-------1425105716688
02-28 14:41:56.694: I/System.out(25507): 位置 ----6554-------1425105716703
02-28 14:41:56.714: I/System.out(25507): 位置 ----6554-------1425105716720
02-28 14:41:56.724: I/System.out(25507): 位置 ----6554-------1425105716734
02-28 14:41:56.744: I/System.out(25507): 位置 ----6554-------1425105716749
02-28 14:41:56.754: I/System.out(25507): 位置 ----6554-------1425105716765
02-28 14:41:56.774: I/System.out(25507): 位置 ----6554-------1425105716780
02-28 14:41:56.794: I/System.out(25507): 位置 ----6554-------1425105716795
02-28 14:41:56.804: I/System.out(25507): 位置 ----6554-------1425105716811
02-28 14:41:56.824: I/System.out(25507): 位置 ----6554-------1425105716828

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-03 10:40
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Android中,getcurrentTime() 方法用于获取播放器的当前时间。这个方法返回的是一个 long 类型的值,表示从系统的时间戳开始到播放器的位置(即播放头的位置)之间的毫秒数。

    然而,由于播放器可能不总是同步到系统时钟,因此这个方法得到的时间可能会滞后于实际播放时间。为了保证一致性,Android提供了两个更可靠的方法来获取播放器的实际进度:

    1. MediaPlayer.getCurrentPosition():这是一个接口,可以在子类中重写,以实现不同的行为。这将返回当前播放器的位置(毫秒),而不是从系统时间戳开始的距离。

    2. AudioTrack.getPlayTime():这是MediaCodec API中的一个方法,它提供了一个更精确的时间点来表示音频的播放进度。这个方法返回的是一个 float 类型的值,表示从播放器开始播放到当前位置之间的百分比。例如,如果当前播放时间为100毫秒,那么这个方法返回的值将是0.1。

    示例代码如下:

    MediaPlayer mp = new MediaPlayer();
    mp.setOnPreparedListener(mp -> {
        long currentTime = mp.getCurrentPosition(); // 返回当前播放器的位置(毫秒)
        float progress = mp.getPlayTime(); // 返回播放器的进度(百分比)
    });
    mp.setDataSource("/path/to/audio");
    mp.prepare();
    mp.start();
    

    请注意,这些方法可能不会立即返回最新数据,因为它们会根据媒体文件的状态和设备性能进行更新。因此,在处理这些信息之前,请确保使用最新的数据。

    评论

报告相同问题?