每1秒更新一次搜索栏时音乐无法流畅播放

Dhananjay pathak:

添加Timer()方法后,搜索栏应该每秒更新一次,它正在更新,但是它们是一个很小的停顿,例如更新搜索栏需要一定的时间来更新...这已导致搜索栏运行不平稳,给人一种滞后的感觉。 ...

package com.example.musicplayer;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.SeekBar;

import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {
    MediaPlayer mediaPlayer;
    AudioManager audioManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mediaPlayer = MediaPlayer.create(this,R.raw.senorita);
        audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        int myMaxValume= audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        int myCurrentValume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);

        SeekBar valumeRocker = findViewById(R.id.seekBar);
        valumeRocker.setMax(myMaxValume);
        valumeRocker.setProgress(myCurrentValume);

        valumeRocker.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,progress,0);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });
        //timeline part of music app
        final SeekBar timeline = findViewById(R.id.timeline);

        timeline.setMax(mediaPlayer.getDuration());

        //set onChange listner on timeline
        timeline.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                mediaPlayer.seekTo(progress);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });
        //customise timeline seekbar

        new Timer().scheduleAtFixedRate(new TimerTask() {
                                            @Override
                                            public void run() {
                                                timeline.setProgress(mediaPlayer.getCurrentPosition());
                                            }
                                        }
                , 0, 1000);
    }
    public void playMe(View view){
        mediaPlayer.start();
    }
    public void pauseMe(View view){
        mediaPlayer.pause();
    }
}

如果我卸妆Time​​r方法..每一个都很好...我想我已经做了一些令人担忧的事情...

帮帮我

先感谢您..

士兵:

您需要检查'fromUser'变量是否为true或对搜索栏进度的更改。因为在两种情况下都将获得seekbar更改回调,所以当用户手动更改时以及Timer更新seekbar进度时。

更新的代码:

package com.example.musicplayer;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.SeekBar;

import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {
MediaPlayer mediaPlayer;
AudioManager audioManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mediaPlayer = MediaPlayer.create(this,R.raw.senorita);
    audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    int myMaxValume= audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
    int myCurrentValume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);

    SeekBar valumeRocker = findViewById(R.id.seekBar);
    valumeRocker.setMax(myMaxValume);
    valumeRocker.setProgress(myCurrentValume);

    valumeRocker.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,progress,0);
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }
    });
    //timeline part of music app
    final SeekBar timeline = findViewById(R.id.timeline);

    timeline.setMax(mediaPlayer.getDuration());

    //set onChange listner on timeline
    timeline.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            if (fromUser) mediaPlayer.seekTo(progress);
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }
    });
    //customise timeline seekbar

    new Timer().scheduleAtFixedRate(new TimerTask() {
                                        @Override
                                        public void run() {
                                            timeline.setProgress(mediaPlayer.getCurrentPosition());
                                        }
                                    }
            , 0, 1000);
}
public void playMe(View view){
    mediaPlayer.start();
}
public void pauseMe(View view){
    mediaPlayer.pause();
}
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章