IT_Programming/Android_Java

[안드로이드] 동영상 재생시 처리 이슈들 / 기본 플레이어로 연속재생 만들기

JJun ™ 2013. 8. 31. 01:04

 


 출처: http://pshology.blogspot.kr/2011/08/blog-post_9007.html

        http://whitegom.tistory.com/24


 

 

앱 내에서 동영상이 재생되고 있을 때 전화가 오게 되면 동영상이 정지되고 통화가 종료되었을 때

다시 그 정지된 순간부터 다시 재생이 되어야 한다고 한다.

잘못 본건지.. 이게 제대로 되지 않으면 앱 검증시 반려된다는 댓글을 어디선가 본 것 같다..
여튼 만들려는 앱의 완성도를 위해 이 부분을 처리하려고 하는데,

동영상 재생 중에 강제로 멈추게 되는 조건이 두세개 있었다.
전화가 올 경우, 전원 버튼이 눌리는 경우.
근데 이 부분을 처리하려다 보니 두개가 엉키는 현상이 있었다.

 

 

//==============================================================

  MyPhoneStateListener phoneListener = new MyPhoneStateListener();

  TelephonyManager telephonyManager  = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
  telephonyManager.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE);

   IntentFilter filter = new IntentFilter(Intent.ACTION_USER_PRESENT);
   filter.addAction(Intent.ACTION_SCREEN_ON);
   filter.addAction(Intent.ACTION_SCREEN_OFF);
   registerReceiver(new BroadcastReceiver()
   {
        @Override
         public void onReceive(Context context, Intent intent)

         {
               String str = intent.getAction();
               if (intent.getAction().equals("android.intent.action.SCREEN_OFF"))
               {
                      m_ScreenOff = true;
                      mVideoView.pause();
                      m_currentPos = mVideoView.getCurrentPosition(); 
               } 
               else if (intent.getAction().equals("android.intent.action.USER_PRESENT"))
               {
                     onResume();
               }
               else if (intent.getAction().equals("android.intent.action.SCREEN_ON"))
               {
                     m_ScreenOff = false;
               }
        }
    }, filter);

   ...
   }
   public class MyPhoneStateListener extends PhoneStateListener
   {  
        @Override
        public void onCallStateChanged(int state, String incomingNumber)
        {
               if (state == TelephonyManager.CALL_STATE_IDLE)
               {
                      mVideoView.seekTo(m_currentPos);
                      mVideoView.start();
               }
               else if (state == TelephonyManager.CALL_STATE_RINGING)
               {
                      mVideoView.pause();
                      m_currentPos = mVideoView.getCurrentPosition();
               }
        }
   }

   @Override
   public void onPause()
   {
        super.onPause();
        m_currentPos = mVideoView.getCurrentPosition();    
   }

   @Override
   public void onResume()
   {
       super.onResume();
       if (m_ScreenOff == true)
       {
             mVideoView.pause();
        }
        else
        {
             mVideoView.seekTo(m_currentPos);
             mVideoView.start();
         }
   }
}

 

 

 


 

 


 

import java.util.ArrayList;

import android.app.Activity;

import android.media.MediaPlayer;

import android.net.Uri;

import android.os.Bundle;

import android.widget.MediaController;

import android.widget.VideoView;


public class TestPlayerActivity extends Activity {

private static final String MOVIE_URL = "http://www.archive.org/download/Unexpect2001/Unexpect2001_512kb.mp4";

private ArrayList<String> array = new ArrayList<String>();

private int count;


@Override

public void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            //주소를 어레이에 추가합니다.

            array.add("http://www.archive.org/download/Unexpect2001/Unexpect2001_512kb.mp4");

            array.add("http://www.archive.org/download/Unexpect2001/Unexpect2001_512kb.mp4");

            array.add("http://www.archive.org/download/Unexpect2001/Unexpect2001_512kb.mp4");

            count = 0;

            setContentView(R.layout.main);

            final VideoView videoView = (VideoView) findViewById(R.id.VideoView);

            MediaController mediaController = new MediaController(this);

            mediaController.setAnchorView(videoView);

            //비디오 uri등록 

            Uri video = Uri.parse(MOVIE_URL);

            videoView.setMediaController(mediaController);

            videoView.setVideoURI(video);

            videoView.requestFocus();

            //비디오 종료시 실행되는 리스너

           MediaPlayer.OnCompletionListener mComplete = new MediaPlayer.OnCompletionListener() {

                          @Override

                           public void onCompletion(MediaPlayer mp) {

                                       //재생할 비디오가 남아있을 경우
                                        if
(array.size() > count) {

                                            Uri video1 = Uri.parse(array.get(count).toString());

                                            count++;

                                            videoView.setVideoURI(video1);

                                            videoView.start();

                                            }

                                       // TODO Auto-generated method stub

                                   }

                         };

                    //리스너 등록 
                    videoView.setOnCompletionListener(mComplete);

                    //비디오 시작 
                    videoView.start();

             }

}

 
xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout android:id="@+id/LinearLayout01"

 android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"

 android:layout_width="fill_parent" android:orientation="vertical">


 <VideoView android:layout_height="fill_parent"

  android:layout_width="fill_parent" android:id="@+id/VideoView"></VideoView>

</LinearLayout>