Android 检测正在播放的视频并更新textview的UI

Android 检测正在播放的视频并更新textview的UI,android,android-videoview,Android,Android Videoview,我对同一活动有视频视图和文本视图。这里是布局的xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rellayout" android:layout_width="match_parent" android:layout_height="match_parent" > <VideoView

我对同一活动有视频视图和文本视图。这里是布局的xml

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rellayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <VideoView
        android:id="@+id/videoview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:padding="5dp" />
    <TextView 
        android:id="@+id/numberTicker"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="@color/purple"
        android:textStyle="bold"
        android:gravity="top|right"
        android:textSize="35dp"
        android:maxEms="3"/>
</RelativeLayout>
可运行的代码只运行一次,永远不会更新。 我错过什么了吗


谢谢你的帮助

您将在
onPrepared()
中获得一个
MediaPlayer
对象。你可以这样使用:

vid.setOnPreparedListener(new OnPreparedListener() {

        @Override
        public void onPrepared(MediaPlayer mp) {
            this.mediaPlayer = mp; //have mediaPlayer be a class variable
            vid.start();
            vid.postDelayed(onEveryQuarterSecond,250);
        }
    });

 private Runnable onEveryQuarterSecond = new Runnable() {

    Random r = new Random();
    int uVal, aVal;

    @Override
    public void run() {
        while(mediaPlayer.isPlaying()) {
             ratings.setText(Integer.toString(r.nextInt()));
             Thread.sleep(250);
        }
    }
};

考虑使用新线程以不阻止主UI线程:

public void updateEverySecond() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            while (mediaPlayer.isPlaying()) {
                try {
                ratings.setText(Integer.toString(r.nextInt()));
                    Thread.sleep(1000);
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
        }
    }).start();
}
public void updateEverySecond() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            while (mediaPlayer.isPlaying()) {
                try {
                ratings.setText(Integer.toString(r.nextInt()));
                    Thread.sleep(1000);
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
        }
    }).start();
}