gpt4 book ai didi

安卓音频搜索栏

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:02:55 28 4
gpt4 key购买 nike

我正在尝试创建一个播放单个音频文件的东西,并且可以使用进度/搜索栏暂停和操作。我想让一个图像占据大部分屏幕,然后在左下方有一个播放暂停按钮,在按钮右侧有一个栏。一切都适用于未链接到音频的搜索栏。我的进度条编码可能一团糟,因为如果从我在 Internet 上看到的几个代码中提取它,但它们大多让我感到困惑,因为它们用于音乐播放器应用程序,而不是用于播放单个音频文件。

有人可以帮我处理进度条吗?任何其他改进我的编程的技巧也会很棒。

(我对android和编程很陌生只是为了警告你)

这是我的Java:

MediaPlayer mediaPlayer;
Button buttonPlayPause;
ImageView Image;
SeekBar seekBar;

private int stateMediaPlayer;
private final int stateMP_NotStarter = 0;
private final int stateMP_Playing = 1;
private final int stateMP_Pausing = 2;
int total;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.playerwere);

Image = (ImageView) findViewById(R.id.pdfview);
Image.setImageResource(R.drawable.wereim);

seekBar = (SeekBar) findViewById(R.id.seekBar);

buttonPlayPause = (Button) findViewById(R.id.playpause);

buttonPlayPause.setOnClickListener(buttonPlayPauseOnClickListener);

seekBar.setOnSeekBarChangeListener(seekBarOnSeekListener);

initMediaPlayer();

Thread currentThread = new Thread(this);
currentThread.start();

}

private void initMediaPlayer() {
mediaPlayer = new MediaPlayer();
mediaPlayer = MediaPlayer.create(were.this, R.raw.were);
stateMediaPlayer = stateMP_NotStarter;

mediaPlayer.setOnPreparedListener(new OnPreparedListener() {

@Override
public void onPrepared(MediaPlayer arg0) {
// TODO Auto-generated method stub
total = mediaPlayer.getDuration();
}

});

seekBar.setProgress(0);
seekBar.setMax(total);
}

Button.OnClickListener buttonPlayPauseOnClickListener = new Button.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (stateMediaPlayer) {
case stateMP_NotStarter:
mediaPlayer.start();
buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_pause);
stateMediaPlayer = stateMP_Playing;
break;
case stateMP_Playing:
mediaPlayer.pause();
buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_play);
stateMediaPlayer = stateMP_Pausing;
break;
case stateMP_Pausing:
mediaPlayer.start();
buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_pause);
stateMediaPlayer = stateMP_Playing;
break;
}

}
};

SeekBar.OnSeekBarChangeListener seekBarOnSeekListener = new SeekBar.OnSeekBarChangeListener() {

@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub

}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub

}

@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub

if (fromUser) {
mediaPlayer.seekTo(progress);
seekBar.setProgress(progress);
}

}
};

@Override
public void run() {
// TODO Auto-generated method stub

try {
while (mediaPlayer != null) {
int currentPosition = mediaPlayer.getCurrentPosition();
Message msg = new Message();
msg.what = currentPosition;
threadHandler.sendMessage(msg);
}
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

private Handler threadHandler = new Handler() {
public void handleMessage(Message msg) {
seekBar.setProgress(msg.what);
}
};

这就是我尝试使用 seekBar 之前我的 java 的样子:

    MediaPlayer mediaPlayer;
Button buttonPlayPause;
ImageView Image;

private int stateMediaPlayer;
private final int stateMP_NotStarter = 0;
private final int stateMP_Playing = 1;
private final int stateMP_Pausing = 2;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.playerwere);

Image = (ImageView) findViewById(R.id.pdfview);
Image.setImageResource(R.drawable.wereim);

buttonPlayPause = (Button) findViewById(R.id.playpause);

buttonPlayPause.setOnClickListener(buttonPlayPauseOnClickListener);

initMediaPlayer();

}

private void initMediaPlayer() {
mediaPlayer = new MediaPlayer();
mediaPlayer = MediaPlayer.create(were.this, R.raw.were);
stateMediaPlayer = stateMP_NotStarter;
}

Button.OnClickListener buttonPlayPauseOnClickListener = new Button.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (stateMediaPlayer) {
case stateMP_NotStarter:
mediaPlayer.start();
buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_pause);
stateMediaPlayer = stateMP_Playing;
break;
case stateMP_Playing:
mediaPlayer.pause();
buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_play);
stateMediaPlayer = stateMP_Pausing;
break;
case stateMP_Pausing:
mediaPlayer.start();
buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_pause);
stateMediaPlayer = stateMP_Playing;
break;
}

}
};

这是 Vishal Vaja 回答后我的 java:

MediaPlayer mediaPlayer;
Button buttonPlayPause;
ImageView Image;
SeekBar seekBar;
Handler handler;

private int stateMediaPlayer;
private final int stateMP_NotStarter = 0;
private final int stateMP_Playing = 1;
private final int stateMP_Pausing = 2;
private int mediaPos;
private int mediaMax;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.playerwere);

Image = (ImageView) findViewById(R.id.pdfview);

Image.setImageResource(R.drawable.wereim);

seekBar = (SeekBar) findViewById(R.id.seekBar);

buttonPlayPause = (Button) findViewById(R.id.playpause);

buttonPlayPause.setOnClickListener(buttonPlayPauseOnClickListener);

seekBar.setOnSeekBarChangeListener(seekBarOnSeekChangeListener);

initMediaPlayer();

}

private void initMediaPlayer() {
handler = new Handler();
mediaPlayer = new MediaPlayer();
mediaPlayer = MediaPlayer.create(were.this, R.raw.were);
stateMediaPlayer = stateMP_NotStarter;
mediaPos = mediaPlayer.getCurrentPosition();

mediaMax = mediaPlayer.getDuration();

seekBar.setMax(mediaMax); // Set the Maximum range of the
// seekBar.setProgress(mediaPos);// set
// current progress to song's

handler.removeCallbacks(moveSeekBarThread);
handler.postDelayed(moveSeekBarThread, 100);
}

private Runnable moveSeekBarThread = new Runnable() {

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

int mediaPos_new = mediaPlayer.getCurrentPosition();
int mediaMax_new = mediaPlayer.getDuration();
seekBar.setMax(mediaMax_new);
seekBar.setProgress(mediaPos_new);

handler.postDelayed(this, 100); // Looping the thread after 0.1
// second
// seconds
}
}
};

Button.OnClickListener buttonPlayPauseOnClickListener = new Button.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (stateMediaPlayer) {
case stateMP_NotStarter:
mediaPlayer.start();
buttonPlayPause
.setBackgroundResource(android.R.drawable.ic_media_pause);
stateMediaPlayer = stateMP_Playing;
break;
case stateMP_Playing:
mediaPlayer.pause();
buttonPlayPause
.setBackgroundResource(android.R.drawable.ic_media_play);
stateMediaPlayer = stateMP_Pausing;
break;
case stateMP_Pausing:
mediaPlayer.start();
buttonPlayPause
.setBackgroundResource(android.R.drawable.ic_media_pause);
stateMediaPlayer = stateMP_Playing;
break;
}

}
};

SeekBar.OnSeekBarChangeListener seekBarOnSeekChangeListener = new SeekBar.OnSeekBarChangeListener() {

@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub

}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub

}

@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub

if (fromUser) {
mediaPlayer.seekTo(progress);
seekBar.setProgress(progress);
}

}
};

最佳答案

我认为这对你有用。

创建一个线程来检查歌曲位置并像这样移动搜索栏,

private Runnable moveSeekBarThread = new Runnable() {

public void run() {
if(mediaPlayer.isplaying){

int mediaPos_new = mediaPlayer.getCurrentPosition();
int mediaMax_new = mediaPlayer.getDuration();
seekBar.setMax(mediaMax_new);
seekBar.setProgress(mediaPos_new);

handler.postDelayed(this, 100); //Looping the thread after 0.1 second
// seconds
}
}
};

然后像这样调用那个线程,

  mediaPos = mediaPlayer.getCurrentPosition();
mediaMax = mediaPlayer.getDuration();

seekBar.setMax(mediaMax); // Set the Maximum range of the
seekBar.setProgress(mediaPos);// set current progress to song's

handler.removeCallbacks(moveSeekBarThread);
handler.postDelayed(moveSeekBarThread, 100);

关于安卓音频搜索栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16141167/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com