0

サービスから更新する必要があるシークバーがあります。ただし、カーソルはまったく移動しません。コードは次のとおりです (必要なコードだけを配置したため、多くのレイアウトを見ることができますが、これらのレイアウトには他のビュー オブジェクトもあります)。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="top"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_alignParentBottom="true"
        android:layout_marginTop="-80dp"
        android:gravity="center_horizontal"
        android:orientation="vertical" >


        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal" >

            <SeekBar
                android:id="@+id/seekBarTime"
                android:layout_width="200dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical" />

        </LinearLayout>

    </LinearLayout>

</RelativeLayout>

ジャワ

public class MediaPlayerService extends Service implements Runnable {

    private MediaPlayer mediaPlayer = null;
    private SeekBar seekBarTime;
    private Handler handler;
    private Runnable runnable;

    @Override
    public void onCreate() {
        //SET SEEKBAR
        LayoutInflater inflater = ( LayoutInflater ) getSystemService( LAYOUT_INFLATER_SERVICE );
        View layout = inflater.inflate( R.layout.play_song , null);
        seekBarTime = (SeekBar) layout.findViewById(R.id.seekBarTime);
        seekBarTime.setOnSeekBarChangeListener(this);

        handler = new Handler();
        runnable = this;
        handler.post(runnable);
    }

    // Seekbar
    public void run() {     
        if(mediaPlayer.isPlaying()) {


            int currentPosition = 0;
            int total = mediaPlayer.getDuration();
            seekBarTime.setMax(total);
            currentPosition = mediaPlayer.getCurrentPosition();

            Log.w("disgustingapps", currentPosition + " / " + total);

            seekBarTime.setProgress(currentPosition);

        }

        handler.postDelayed(runnable, 1000);
    }
}

logcat は currentPosition と total が空でないことを保証します。しかし、何も起こりません。手伝って頂けますか?前もって感謝します

4

1 に答える 1

0

それはうまくいくはずです。私はあなたの方法をテストrun()しましたが、私の側では SeekBar がうまく更新されました。
どこで作成して開始しMediaPlayerますか?

run() メソッドは、メディア プレーヤーが再生されているかどうかを確認しています。

if(mediaPlayer.isPlaying()) {
...
}

でも見えないmediaPlayer().start()

于 2013-01-05T20:04:28.650 に答える