투케이2K

316. (kotlin/코틀린) [유틸 파일] 안드로이드 : videoPlayView : 비디오 재생 팝업창 호출 메소드 본문

Kotlin

316. (kotlin/코틀린) [유틸 파일] 안드로이드 : videoPlayView : 비디오 재생 팝업창 호출 메소드

투케이2K 2023. 6. 19. 22:14

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Kotlin

 

[소스 코드]

 

        // -----------------------------------------------------------------------------------------
        // TODO [SEARCH FAST] : [VOID] : [비디오 재생 팝업창 호출 처리 메소드]
        // -----------------------------------------------------------------------------------------
        // TODO [호출 방법 소스 코드]
        // -----------------------------------------------------------------------------------------
        /*
        try {

            // [팝업창 활성 수행]
            C_Ui_View.videoPlayView(A_Intro@this, "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4", "알림", "", "확인")

        }
        catch (Exception e){
            e.printStackTrace()
        }
        */
        // -----------------------------------------------------------------------------------------
        fun videoPlayView(mContext: Context, url: String, title: String, message: String, ok: String) {
            try {
                // ===============================================================
                S_Log._D_("비디오 재생 팝업창 호출 수행 실시", arrayOf(
                    "URL :: $url"
                ))
                // ===============================================================


                // [UI 생성 실시]
                val videoView = VideoView(mContext)
                videoView.setPadding(5, 5, 5, 5)


                // [URL 데이터 널 체크 수행]
                if (C_Util.stringNotNull(url) === true) { // [널 아님]


                    // TODO [로딩 프로그레스 동작]
                    startLoadingAlert(
                        mContext,
                        S_FinalMsg.AL_TITLE,
                        "비디오 재생 준비 중 입니다 .. 잠시만 기다려 주세요.",
                        ""
                    )


                    // TODO [비디오 재생할 URL 지정]
                    videoView.setVideoURI(Uri.parse(url))


                    // TODO [비디오 재생 준비 완료 시]
                    videoView.setOnPreparedListener {
                        try {

                            S_Log._D_("비디오 재생 준비 완료", null)

                            // TODO [비디오 재생 시작]
                            videoView.start()

                            // TODO [로딩 프로그레스 종료]
                            stopLoadingAlert(mContext)

                            // TODO [토스트 알림]
                            toastShortNormal(mContext, "비디오 재생을 수행합니다.")

                        } catch (e: Exception) {
                            e.printStackTrace()
                        }
                    }


                    // TODO [비디오 재생 완료 시]
                    videoView.setOnCompletionListener {
                        S_Log._W_("비디오 영상 재생 완료", null)

                        // TODO [로딩 프로그레스 종료]
                        stopLoadingAlert(mContext)

                        //TODO [Alert 팝업창 알림 실시]
                        toastShortNormal(mContext, "비디오 영상 재생이 완료 되었습니다. ^0^")
                    }


                    // TODO [비디오 재생에 문제가 발생 시]
                    videoView.setOnErrorListener { mediaPlayer, i, i1 ->
                        S_Log._E_("비디오 재생 문제 발생", null)

                        // TODO [로딩 프로그레스 종료]
                        stopLoadingAlert(mContext)

                        //TODO [Alert 팝업창 알림 실시]
                        toastShortError(mContext, "비디오 영상 재생 중 문제가 발생했습니다. ㅠ0ㅠ")
                        false
                    }


                    // TODO [팝업창 생성 실시]
                    Handler(Looper.getMainLooper()).postDelayed({
                        if (mContext != null) {

                            // [AlertDialog 팝업창 생성]
                            AlertDialog.Builder(mContext)
                                .setTitle(title) //[팝업창 타이틀 지정]
                                //.setIcon(R.drawable.app_icon) //[팝업창 아이콘 지정]
                                .setMessage(message) //[팝업창 내용 지정]
                                .setView(videoView)
                                .setCancelable(false) //[외부 레이아웃 클릭시도 팝업창이 사라지지않게 설정]
                                .setPositiveButton(ok) { dialog, which ->
                                    // TODO Auto-generated method stub
                                    // -----------------------------------------
                                    // TODO [확인 버튼 클릭 이벤트 처리]
                                    // -----------------------------------------
                                    S_Log._D_("비디오 뷰 팝업창 호출 [확인] 클릭", null)
                                    // -----------------------------------------
                                    try {

                                        // TODO [비디오 정지 실시]
                                        if (videoView != null) {
                                            videoView.stopPlayback()
                                        }

                                    } catch (e: Exception) {
                                        e.printStackTrace()
                                    }
                                }
                                .show()
                        }
                    }, 0)

                } else { // [널 임]

                    // TODO [로딩 프로그레스 종료]
                    stopLoadingAlert(mContext)

                    // [에러 팝업창 표시]
                    val error = arrayOf(
                        "설 명 :: URL 주소가 올바르지 않습니다. 주소를 다시 확인해 주세요.",
                        "URL :: $url"
                    )
                    C_Ui_View.errorShowListView(mContext, false, title, error, S_FinalMsg.AL_OK, "")
                }

            } catch (e: Exception) {
                e.printStackTrace()

                // TODO [로딩 프로그레스 종료]
                stopLoadingAlert(mContext)
            }
        }

 

반응형
Comments