미디어 플레이어 구현중인데요..

 

미디어 UI 클래스 와 미디어 제어관련 클래스를 따로 만들었는데요..

 

제어관련 클래스를 Handler 를 상속받아 UI 업데이트하게 구현했는데...

 

보통 Handler 를 사용하면 sendMessage 를 이용하여 UI 를 업데이트 하는데 전 다른식으로 했거든요..

 

아래와 같이 사용해도 문제가 없는지 궁금하네요..

 

꼭 답변부탁드립니다..

 

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.media.MediaPlayer;
import android.os.Handler;
import android.text.Html;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.TextView;
 
public class MoviePlayerController extends Handler {
    
    private static MediaPlayer mMediaPlayer = null;
    private static SurfaceHolder mSurfaceHolder = null;
    
    private static ArrayList<String> mFileList = null;
    private String mCurrentFileExt = null;
    
    private int mCurrentFilePos = 0;
    
    private View mRootView = null;
    private TextView mFileName = null;
    private TextView mTotalTime = null;
    private TextView mPlayTime = null;
    private TextView mSubtitleText = null;
    private TextView mSubtitleText2 = null;
    private SeekBar mSeekBar = null;
    
    public MoviePlayerController(Context context, View mRootView) {
        
        mMediaPlayer = new MediaPlayer();
        mFileList = new ArrayList<String>();
        this.mRootView = mRootView;
        setUiThreadItem();
        setInitItem();
        
    }
    
    public void setUiThreadItem()
    {
        mFileName = (TextView)mRootView.findViewById(R.id.MoviePlayer_fileName);
        mPlayTime = (TextView)mRootView.findViewById(R.id.MoviePlayer_PlayTime);
        mTotalTime = (TextView)mRootView.findViewById(R.id.MoviePlayer_TotalTime);
        mSeekBar = (SeekBar)mRootView.findViewById(R.id.MoviePlayer_Progress);
        mSubtitleText = (TextView)mRootView.findViewById(R.id.MoviePlayer_Subtitle);
        mSubtitleText2 = (TextView)mRootView.findViewById(R.id.MoviePlayer_Subtitle2);
        
    }
    
    public void setInitItem()
    {
        mPlayTime.setText("00:00:00");
        mTotalTime.setText("00:00:00");
        mSeekBar.setProgress(0);
        mSeekBar.setSecondaryProgress(0);
    }
    
    
    
    public void setSurfaceHolder(SurfaceHolder sh)
    {
        mSurfaceHolder = sh;
    }
    
    public String getCurrentFilePath()
    {
        return mFileList.get(mCurrentFilePos);
    }
    
    public void InitMoviePlayer()
    {
        
      
        if(mMediaPlayer == null)
        {
            mMediaPlayer = new MediaPlayer();
        }
        
        try{
            mMediaPlayer.reset();
            mMediaPlayer.setDataSource(mFileList.get(mCurrentFilePos));
            mMediaPlayer.setDisplay(mSurfaceHolder);
                
            mMediaPlayer.setOnErrorListener(MediaErrorListener);
            mMediaPlayer.setOnCompletionListener(MediaCompletionListener);
            mMediaPlayer.setOnBufferingUpdateListener(MediaBufferingListener);
            mMediaPlayer.setOnPreparedListener(MediaPreparedListener);
            mMediaPlayer.setOnSeekCompleteListener(MediaSeekCompletionListener);
            
        }
        catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }
    
    public void MoviePrePare()
    {
        try {
    
            if(mMediaPlayer != null)
            {
                mMediaPlayer.prepare();    
            }
            
            
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    public void MoviePrePareAsync()
    {
        mMediaPlayer.prepareAsync();
        
    }
    
    
    public void setProgressData()
    {
        mSeekBar.setMax((int)getMovieDuration());
    }
    
    public String getCurrentFileName()
    {
        String FilePath = null;
        String FileName = null;
        
        FilePath = mFileList.get(mCurrentFilePos);
        FileName = FilePath.substring(FilePath.lastIndexOf("/")+1,FilePath.length());
     
        return FileName;
    }
    
    public void addFilePathList(String path)
    {
        mFileList.add(path);
    }
    
    public long getMovieDuration() {
        
        long duration = 0;
        if(mMediaPlayer != null)
        {
            duration = mMediaPlayer.getDuration();    
        }
        return duration;
    }
    public long getMoviePosition() {
        
        long pos = 0;
        
        if(mMediaPlayer != null)
        {
            pos = mMediaPlayer.getCurrentPosition();
        }
            
        return pos;
    }
    public long setMovieSeek(long whereto) {
        
        if(mMediaPlayer != null)
        {
            mMediaPlayer.seekTo((int) whereto);
        }
            
        
        return getMoviePosition();
    }
    
    public void setMovieVolume(float vol) {
        
        if(mMediaPlayer != null)
        {
            mMediaPlayer.setVolume(vol, vol);
        }
            
    }
    
    public void MovieStart() {
        
        if(mMediaPlayer == null)
        {
            InitMoviePlayer();
            MoviePrePare();
            StartSmi();
            return;
        }
        
        if(mMediaPlayer != null)
        {
            if(MovieisPlaying())
            {
                StartSmi();
                return;
            }
                
            
            mFileName.setText(getCurrentFileName());
            mTotalTime.setText(Util.millisec2Time(mMediaPlayer.getDuration()));
            
            
            try{
                
                mMediaPlayer.start();
                setProgressData();
                startPlayProgressUpdater();
                StartSmi();
                
            }
            catch (IllegalStateException e) {
                // TODO: handle exception
               
            }
            catch (IllegalArgumentException e) {
                // TODO: handle exception
              
            }
              
        }
          
    }
    
    public void MoviePause() {
        
        if(mMediaPlayer != null)
        {
            mMediaPlayer.pause();
        }
               
    }
    
    public void MovieStop() {
        
        if(mMediaPlayer != null)
        {
           mMediaPlayer.stop();
           mMediaPlayer.release();
           mMediaPlayer = null;
           clearSmiData();
           setInitItem();
        }
            
    }
    public boolean MovieisPlaying() {
        
        if(mMediaPlayer != null)
        {
            return mMediaPlayer.isPlaying();    
        }
        
        return false;
        
    }
    
    
    public void MovieRewind()
    {
    }
    
    public void MovieFoward()
    {
    }
    
    public void MoviePrevious()
    {
        mCurrentFilePos--;
        
        if(mCurrentFilePos < 0)
            mCurrentFilePos = 0;
        
        if(mMediaPlayer != null)
        {
            if(MovieisPlaying())
            {
                MovieStop();
                InitMoviePlayer();
                MoviePrePare();
            }
            else
            {
                InitMoviePlayer();
                MoviePrePare();
            }    
        }
        else
        {
            InitMoviePlayer();
            MoviePrePare();
        }
        
        
    }
    
    public void MovieNext()
    {
        
        mCurrentFilePos++;
        
        LoggerA.d(LOG_TAG, "size : " + mFileList.size() + " pos : " + mCurrentFilePos);
        
        if(mCurrentFilePos < mFileList.size())
        {
            if(mMediaPlayer != null)
            {
                if(MovieisPlaying())
                {
                    MovieStop();
                    InitMoviePlayer();
                    MoviePrePare();
                }
                else
                {
                    InitMoviePlayer();
                    MoviePrePare();
                }    
            }
            else
            {
                InitMoviePlayer();
                MoviePrePare();
            }
            
        }
        else
        {
            
            mCurrentFilePos--;
            MovieStop();
            InitMoviePlayer();
            MoviePrePare();
        }
        
    }
    
    public void MovieBtnList()
    {
    }
    
    private int getMediaType(String Path)
    {
        String Ext = Util.getFileExtention(Path);
        
        if(Ext != null)
        {
            if(Ext.equalsIgnoreCase("ts"))
            {
                return MEDIA_TS;
            }
            else
            {
                return MEDIA_LOCAL_VIDEO;   
            }
        }
        
        return MEDIA_EMPTY;
    }
    
    
    
    
    public void startPlayProgressUpdater() {
        
        mSeekBar.setProgress((int)getMoviePosition());
        mPlayTime.setText(Util.millisec2Time((int)getMoviePosition()));
        if (mMediaPlayer != null) {
            
            if(MovieisPlaying())
            {
                Runnable notification = new Runnable() {
                    public void run() {
                    
                        startPlayProgressUpdater();
                    }
                };
             
                postDelayed(notification,1000);
    
            }
            else
            {
                MoviePause();
            }
        }
    }
   
   
    
    
    
    
    /*****************************************************
    *
    *    리스너 등록
    *
    *****************************************************/
    // 재생완료시  
    MediaPlayer.OnCompletionListener MediaCompletionListener = new MediaPlayer.OnCompletionListener() {
        
        @Override
        public void onCompletion(MediaPlayer mp) {
            // TODO Auto-generated method stub
            LoggerA.d(LOG_TAG, "onCompletion");
            if(mMediaPlayer != null)
            {
                MovieNext();
            }
            
                    
        }
    };
    // SeekTo 호출후 동기화를 위해
    MediaPlayer.OnSeekCompleteListener MediaSeekCompletionListener = new MediaPlayer.OnSeekCompleteListener() {
        
        @Override
        public void onSeekComplete(MediaPlayer mp) {
            // TODO Auto-generated method stub
            LoggerA.d(LOG_TAG, "onSeekComplete");
        }
    };
    
    // 스트리밍을 위한
    MediaPlayer.OnBufferingUpdateListener MediaBufferingListener = new MediaPlayer.OnBufferingUpdateListener() {
        
        @Override
        public void onBufferingUpdate(MediaPlayer mp, int percent) {
            // TODO Auto-generated method stub
            LoggerA.d(LOG_TAG, "onBufferingUpdate");
        }
    };
    
    // 에러처리 리스너
    MediaPlayer.OnErrorListener MediaErrorListener = new MediaPlayer.OnErrorListener() {
        
        @Override
        public boolean onError(MediaPlayer mp, int what, int extra) {
            // TODO Auto-generated method stub
            LoggerA.d(LOG_TAG, "onError");
            return false;
        }
    };
    
    // Prepared 를 위한 리스너
    MediaPlayer.OnPreparedListener MediaPreparedListener = new MediaPlayer.OnPreparedListener() {
        
        @Override
        public void onPrepared(MediaPlayer mp) {
            // TODO Auto-generated method stub
            LoggerA.d(LOG_TAG, "onPrepared");
            MovieStart();
            
            
           
        }
    };
    
    
}