解决方案 »
- txt文本阅读器,如何分批读取txt文件里的文本
- android startquery方法的问题
- android程序安装路径
- 如何实现MIUI联系人那样的右边那种按字母顺序的快速定位条
- 如何实现信息发布功能
- 最近在刷机,需要MOTO ME501的recovery.img软件,谁能发一份啊,不胜感激
- 在eclipse的android的项目中导入自己用写的jar包疑问
- 把手机的短信读取出来,并显示在电脑
- adb shell input keyevent 67 模拟删除按键太慢?
- AccessibilityService操作流程完成后如何跳转到自己的APP页面?
- 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) {}
}
}