最も効率的な方法は、JRaymond の回答とEventBusを使用することです
private class MediaObserver implements Runnable {
private AtomicBoolean stop = new AtomicBoolean(false);
public void stop() {
stop.set(true);
}
@Override public void run() {
while (!stop.get()) {
try {
if (player.isPlaying())
sendMsgToUI(player.getCurrentPosition(),
player.getDuration());
} catch (Exception e){e.printStackTrace();}
try {
Thread.sleep(100);
} catch (InterruptedException e) { e.printStackTrace(); }
}
}
}
private MediaObserver observer = null;
public void runMedia() {
observer = new MediaObserver();
new Thread(observer).start();
}
//handles all the background threads things for you
private void sendMsgToUI(int position) {
ChangingEvent event = new ChangingEvent(position);
EventBus.getDefault().post(event);
}
ChangingEvent クラスは次のようになります。
public class ChangingEvent {
private int position;
public ChangingEvent(int position) {
this.position= position;
}
public int getPosition() {
return position;
}
}
アクティビティまたはフラグメントで行う必要があるのは、
class YouClass extends Activity {
private EventBus eventBus = EventBus.getDefault();
}
@Override protected void onCreate(Bundle savedInstanceState) {
//your code
eventBus.register(this);
}
//eventbus that updates UI
public void onEventMainThread(ChangingEvent event) {
//seekbar or any other ui element
seekBar.setProgress(event.getPosition());
}