투케이2K

526. (kotlin/코틀린) [유틸 파일] [기능 보정 - 파라미터 전달] goAppRunLaunch : 외부 앱이 설치되어 있으면 메인 실행, 아니면 마켓이동 실시 본문

Kotlin

526. (kotlin/코틀린) [유틸 파일] [기능 보정 - 파라미터 전달] goAppRunLaunch : 외부 앱이 설치되어 있으면 메인 실행, 아니면 마켓이동 실시

투케이2K 2024. 9. 13. 09:53

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Kotlin

 

[소스 코드]

 

        // ----------------------------------------------------------------------------------
        // TODO [SEARCH FAST] : [goAppRunLaunch] : 외부 앱이 설치되어 있으면 메인 실행, 아니면 마켓이동 실시
        // ----------------------------------------------------------------------------------
        fun goAppRunLaunch(mContext: Context, packageNames: String, parameters: HashMap<String, String>?) {

            /**
             * // -----------------------------------------
             * [goAppRunLaunch 메소드 설명]
             * // -----------------------------------------
             * 1. getLaunchIntentForPackage 사용해 외부앱 설치 여부 확인 및 외부앱 실행 실시
             * // -----------------------------------------
             * 2. 호출 방법 : C_MoveApp.goAppRunLaunch(this@A_Intro, "com.test.app", object : HashMap<String, String>() { init { put("name", "twok") } } )
             * // -----------------------------------------
             * 3. 로 직 : 외부앱이 설치되지 않은 경우 앱 설치 진행 / 설치된 경우 외부앱 실행 실시
             * // -----------------------------------------
             * 4. TODO [중요] AndroidManifest.xml 파일에서 queries >> package 등록 필요
             * // -----------------------------------------
             * 5. TODO [중요] 파라미터 전송 시 >> 받는 쪽 액티비티 런처 화면에서는 getIntent() 로 확인
             * // -----------------------------------------
             * */


            // [사전 패키지 명 널 여부 체크]
            if (C_Util.stringNotNull(packageNames) == true){
            }
            else { // [패키지 명이 널인 경우]
                // ===============================================================
                S_Log._F_(mContext,"외부 앱 실행 및 마켓 이동 실시 [외부 열기 실패]", arrayOf(
                    "ERROR :: " + "패키지명 null 널 임",
                    "PACKAGE :: $packageNames"
                ))
                // ===============================================================
                return
            }


            // [외부앱이 설치되었는지 확인]
            try {
                // [특정 패키지 명이 앱에 설치 되어 있는지 확인]
                val existPackage = mContext.packageManager.getLaunchIntentForPackage(packageNames)
                if (existPackage != null) { // [설치되어 있는 경우]
                    // ===============================================================
                    S_Log._F_(mContext, "외부 앱 실행 및 마켓 이동 실시 [외부 열기]", arrayOf(
                        "찾을려는 앱 :: $packageNames",
                        "상 태 :: " + "외부 앱 설치 됨",
                        "로 직 :: " + "외부 앱 열기 수행",
                        "전달 데이터 :: " + "$parameters",
                    ))
                    // ===============================================================

                    // [인텐트 이동]
                    val intent = mContext.packageManager.getLaunchIntentForPackage(packageNames)
                    intent!!.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)

                    if (parameters != null && parameters.size > 0 && parameters.isEmpty() == false) {

                        val set: Set<*> = parameters.keys
                        val iterator = set.iterator()

                        while (iterator.hasNext()) {
                            val key = iterator.next() as String
                            val value = parameters[key]

                            // [인텐트 데이터 추가]
                            intent.putExtra(key, value)

                            S_Log.w("Intent Put Data", "$key / $value")
                        }
                    }

                    mContext.startActivity(intent)
                }
                else { // [설치되지 않은 경우]
                    // ===============================================================
                    S_Log._F_(mContext,"외부 앱 실행 및 마켓 이동 실시 [마켓 이동]", arrayOf(
                        "찾을려는 앱 :: $packageNames",
                        "상 태 :: " + "외부 앱 설치 안됨",
                        "로 직 :: " + "구플 플레이스토어 마켓 이동 수행 실시"
                    ))
                    // ===============================================================

                    // [구글 플레이스토어 이동]
                    val marketLaunch = Intent(Intent.ACTION_VIEW)
                    marketLaunch.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
                    marketLaunch.data = Uri.parse("market://details?id=$packageNames")
                    mContext.startActivity(marketLaunch)
                }
            }
            catch (e: ActivityNotFoundException) {
                // [이동할 패키지 명을 찾이 못한 경우]
                // ===============================================================
                S_Log._printStackTrace_(mContext, "외부 앱 실행 및 마켓 이동 실시 [외부 열기 실패]", arrayOf(
                    "찾을려는 앱 :: $packageNames",
                    "상 태 :: " + "ActivityNotFoundException",
                    "로 직 :: " + "구플 플레이스토어 마켓 이동 수행 실시"
                ), e)
                // ===============================================================

                // [구글 플레이스토어 이동]
                val marketLaunch = Intent(Intent.ACTION_VIEW)
                marketLaunch.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
                marketLaunch.data = Uri.parse("market://details?id=$packageNames")
                mContext.startActivity(marketLaunch)
            }
            catch (e: Exception) {
                // ===============================================================
                S_Log._printStackTrace_(mContext,"외부 앱 실행 및 마켓 이동 실시 [외부 열기 에러]", arrayOf(
                    "찾을려는 앱 :: $packageNames",
                    "상 태 :: " + "Exception",
                    "로 직 :: " + "NONE"
                ), e)
                // ===============================================================
            }
        }

 

반응형
Comments