2013-07-13 4 views
0

나는 안드로이드 프로그래밍에 초보자입니다. 나는 다음 코드를 가지고 있지만 문제가있다. 사운드를 재생하지 않고 검색 바를 클릭하면 강제로 닫힙니다. 나는 내가 재생 버튼을 클릭하면 탐색 바를 클릭하고 탐색 할 수 있지만 탐색 바를 클릭하지 않고 탐색 바를 클릭하면 강제로 닫히는 것을 의미합니다. 뭐가 문제 야?!검색 바를 클릭하면 android force close가 표시됩니다.

import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.app.Activity; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ImageButton; 
import android.widget.SeekBar; 
import android.widget.SeekBar.OnSeekBarChangeListener; 


    public class MainActivity extends Activity implements Runnable, OnClickListener, OnSeekBarChangeListener{ 
     private SeekBar seekBar; 
     private ImageButton startMedia; 
     private ImageButton pauseMedia; 
     private MediaPlayer mp; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main);    

      AudioControl();   
     } 

     public void AudioControl(){ 
      seekBar = (SeekBar) findViewById(R.id.seekBar1); 
      startMedia = (ImageButton) findViewById(R.id.playbutton); 
      pauseMedia = (ImageButton) findViewById(R.id.pausebutton); 
      seekBar.setOnSeekBarChangeListener(this); 
      startMedia.setOnClickListener(this); 
      pauseMedia.setOnClickListener(this); 
     } 

     public void run() { 
      int currentPosition= 0; 
      int total = mp.getDuration(); 
      while (mp!=null && currentPosition<total) { 
       try { 
        Thread.sleep(1000); 
        currentPosition= mp.getCurrentPosition(); 
       } catch (InterruptedException e) { 
        return; 
       } catch (Exception e) { 
        return; 
       }    
       seekBar.setProgress(currentPosition); 
      } 
     } 

     public void onClick(View v) { 
      if (v.equals(startMedia)) { 
       if (mp != null && mp.isPlaying()) return; 
       if(seekBar.getProgress() > 0) { 
        mp.start(); 
        return; 
       } 
       mp = MediaPlayer.create(MainActivity.this, R.raw.lone); 
       mp.start();      
       seekBar.setProgress(0); 
       seekBar.setMax(mp.getDuration()); 
       new Thread(this).start(); 
      } 

      if (v.equals(pauseMedia) && mp!=null) { 
       mp.pause(); 
      }  

     } 

     public void onStartTrackingTouch(SeekBar seekBar) { 
     } 

     public void onStopTrackingTouch(SeekBar seekBar) { 
     } 

     public void onProgressChanged(SeekBar seekBar, int progress, 
       boolean fromUser) { 
      if(fromUser) mp.seekTo(progress); 

     } 
    } 

그리고 난 또 다른 질문이 있습니다 : 내가 플레이 버튼을 사용자가 클릭이 일시 정지 버튼이 표시 될 때 싶어 때 일시 정지 버튼을 사용자가 클릭이 투엔 표시 안함. 어떤 코드를 사용해야하고이 코드를 어디에 넣어야하는지 알려주세요.

답변

0

는 UI는 UI 스레드 자체에서 호출하는 관리 모든 방법

당신은 스레드 다른 frome 크로스 UIThread에

seekBar.setProgress(currentPosition); 

를 실행할 수 없습니다.

관련 문제