为什么MediaPlayer pause();后会将之前新建的线程重新new一个? mediaplayerthreadAndroid 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 第一个问题,你本来每次点击后都执行new aseekth();,当然id每次都不一样。第二个问题,是你自身业务逻辑问题,请仔细检查你的逻辑是否正确。 额不好意思,我还是不太明白,能否说得再清楚些~你点击暂停的时候并没有操作线程那你看我这样做:当点击暂停时seekbar.wait();点击继续播放时seekbar.notify();可以吗? 额不好意思,我还是不太明白,能否说得再清楚些~你点击暂停的时候并没有操作线程那你看我这样做:当点击暂停时seekbar.wait();点击继续播放时seekbar.notify();可以吗?应该可以,不过最好是线程去刷新界面而不做业务逻辑操作,,, 不好意思,又来麻烦你了~我通过休眠、唤醒线程来更新seekbar,但还是弄不对,请指点一二~skb_audio = (SeekBar) this.findViewById(R.id.SeekBar01);skb_audio.setOnSeekBarChangeListener(new SeekBarChangeEvent());class ClickEvent implements View.OnClickListener { public void onClick(View v) { synchronized (skb_audio) { //skb_audio是所要更新的seekbar,先将他上锁 if (v == btn_start_audio) { // 设置audio标记,以便控制各自的进度条变化 isAudio = true; // 恢复到未初始化的状态 m.reset(); // 有两种方式获取资源文件:从工程的resource目录,或是指定路径;鉴于文件比较大,所以本示例均是从SD卡获取 m = MediaPlayer.create(MainActivity.this, R.raw.big);// 读取音频 // 设置SeekBar的长度 skb_audio.setMax(m.getDuration()); // 每次播放都将进度条重置为0 skb_audio.setProgress(0); m.start(); // 播放 // 启动一个新线程用于更新音频的进度条 aseekth as = new aseekth(); as.start(); System.out.println(as.getId()); } else if (v == btn_stop_audio) { m.pause(); try { skb_audio.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("cannot wait"); } } else if (v == btn_continue_audio) { skb_audio.notify(); m.start(); } } } } // SeekBar进度改变事件 class SeekBarChangeEvent implements SeekBar.OnSeekBarChangeListener { public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { } public void onStartTrackingTouch(SeekBar seekBar) { } public void onStopTrackingTouch(SeekBar seekBar) { m.seekTo(seekBar.getProgress()); } } //音频进度条线程处理 private class aseekth extends Thread { public void run() { try { while (isAudio) { if (skb_audio.getProgress() < m .getCurrentPosition()) { skb_audio.setProgress(m .getCurrentPosition()); sleep(100); } } } catch (Exception e) {} } }点击完btn_stop_audio后音乐停止,seekbar也停止更新;但是, btn_continue_audio点击没反应,然后一会就弹出个对话框,说无响应,是否需要等待。 改成这样还是不行,请问这样哪有错了?skb_audio = (SeekBar) this.findViewById(R.id.SeekBar01);skb_audio.setOnSeekBarChangeListener(new SeekBarChangeEvent()); class ClickEvent implements View.OnClickListener { public void onClick(View v) { synchronized (skb_audio) { //skb_audio是所要更新的seekbar,先将他上锁 if (v == btn_start_audio) { // 设置audio标记,以便控制各自的进度条变化 isAudio = true; // 恢复到未初始化的状态 m.reset(); // 有两种方式获取资源文件:从工程的resource目录,或是指定路径;鉴于文件比较大,所以本示例均是从SD卡获取 m = MediaPlayer.create(MainActivity.this, R.raw.big);// 读取音频 // 设置SeekBar的长度 skb_audio.setMax(m.getDuration()); // 每次播放都将进度条重置为0 skb_audio.setProgress(0); m.start(); // 播放 // 启动一个新线程用于更新音频的进度条 aseekth as = new aseekth(); as.start(); System.out.println(as.getId()); } else if (v == btn_stop_audio) { m.pause(); try { skb_audio.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("cannot wait"); } } else if (v == btn_continue_audio) { skb_audio.notify(); m.start(); } } } } // SeekBar进度改变事件 class SeekBarChangeEvent implements SeekBar.OnSeekBarChangeListener { public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { } public void onStartTrackingTouch(SeekBar seekBar) { } public void onStopTrackingTouch(SeekBar seekBar) { m.seekTo(seekBar.getProgress()); } } //音频进度条线程处理 private class aseekth extends Thread { public void run() { try { while (isAudio) { if (skb_audio.getProgress() < m .getCurrentPosition()) { skb_audio.setProgress(m .getCurrentPosition()); sleep(100); } } } catch (Exception e) {} } } 那就是线程阻塞了,btn_continue_audio是不是和start是在一个activity里面? 一般在ListView显示的ItemView的最右边都有个箭头,是系统自带的还是自己加图片的? 仿Samsung Galaxy s3设置UI 各位大神---求助关于背景颜色的问题 帮忙看下那里有错啊? 如何在tabActivity的一个tab标签页中使用googleMap? Android如何批量创建动态按钮并设置监听 android关于html5 android 上怎么使用语音识别(c/c++语言开发) 请问关于图片切换的问题 有一个不是很专业的问题!快递数据接口 android串口通信 求一段修改GPS坐标信息的代码
第二个问题,是你自身业务逻辑问题,请仔细检查你的逻辑是否正确。
那你看我这样做:
当点击暂停时seekbar.wait();
点击继续播放时seekbar.notify();
可以吗?
那你看我这样做:
当点击暂停时seekbar.wait();
点击继续播放时seekbar.notify();
可以吗?应该可以,不过最好是线程去刷新界面而不做业务逻辑操作,,,
skb_audio.setOnSeekBarChangeListener(new SeekBarChangeEvent());
class ClickEvent implements View.OnClickListener {
public void onClick(View v) {
synchronized (skb_audio) { //skb_audio是所要更新的seekbar,先将他上锁
if (v == btn_start_audio) {
// 设置audio标记,以便控制各自的进度条变化
isAudio = true;
// 恢复到未初始化的状态
m.reset();
// 有两种方式获取资源文件:从工程的resource目录,或是指定路径;鉴于文件比较大,所以本示例均是从SD卡获取
m = MediaPlayer.create(MainActivity.this,
R.raw.big);// 读取音频
// 设置SeekBar的长度
skb_audio.setMax(m.getDuration());
// 每次播放都将进度条重置为0
skb_audio.setProgress(0);
m.start(); // 播放
// 启动一个新线程用于更新音频的进度条
aseekth as = new aseekth();
as.start();
System.out.println(as.getId());
}
else if (v == btn_stop_audio) {
m.pause();
try {
skb_audio.wait();
}
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("cannot wait");
}
}
else if (v == btn_continue_audio) {
skb_audio.notify();
m.start();
}
}
}
}
// SeekBar进度改变事件 class SeekBarChangeEvent implements
SeekBar.OnSeekBarChangeListener {
public void onProgressChanged(SeekBar seekBar,
int progress, boolean fromUser) {
}
public void onStartTrackingTouch(SeekBar seekBar) {
}
public void onStopTrackingTouch(SeekBar seekBar) {
m.seekTo(seekBar.getProgress());
}
}
//音频进度条线程处理 private class aseekth extends Thread {
public void run() {
try {
while (isAudio) {
if (skb_audio.getProgress() < m
.getCurrentPosition()) {
skb_audio.setProgress(m
.getCurrentPosition());
sleep(100);
}
}
}
catch (Exception e) {}
}
}点击完btn_stop_audio后音乐停止,seekbar也停止更新;
但是, btn_continue_audio点击没反应,然后一会就弹出个对话框,说无响应,是否需要等待。
skb_audio.setOnSeekBarChangeListener(new SeekBarChangeEvent());
class ClickEvent implements View.OnClickListener {
public void onClick(View v) {
synchronized (skb_audio) { //skb_audio是所要更新的seekbar,先将他上锁
if (v == btn_start_audio) {
// 设置audio标记,以便控制各自的进度条变化
isAudio = true;
// 恢复到未初始化的状态
m.reset();
// 有两种方式获取资源文件:从工程的resource目录,或是指定路径;鉴于文件比较大,所以本示例均是从SD卡获取
m = MediaPlayer.create(MainActivity.this,
R.raw.big);// 读取音频
// 设置SeekBar的长度
skb_audio.setMax(m.getDuration());
// 每次播放都将进度条重置为0
skb_audio.setProgress(0);
m.start(); // 播放
// 启动一个新线程用于更新音频的进度条
aseekth as = new aseekth();
as.start();
System.out.println(as.getId());
}
else if (v == btn_stop_audio) {
m.pause();
try {
skb_audio.wait();
}
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("cannot wait");
}
}
else if (v == btn_continue_audio) {
skb_audio.notify();
m.start();
}
}
}
}
// SeekBar进度改变事件
class SeekBarChangeEvent implements
SeekBar.OnSeekBarChangeListener {
public void onProgressChanged(SeekBar seekBar,
int progress, boolean fromUser) {
}
public void onStartTrackingTouch(SeekBar seekBar) {
}
public void onStopTrackingTouch(SeekBar seekBar) {
m.seekTo(seekBar.getProgress());
}
}
//音频进度条线程处理
private class aseekth extends Thread {
public void run() {
try {
while (isAudio) {
if (skb_audio.getProgress() < m
.getCurrentPosition()) {
skb_audio.setProgress(m
.getCurrentPosition());
sleep(100);
}
}
}
catch (Exception e) {}
}
}