투케이2K

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

Android

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

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

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Java / Kotlin

 

[소스 코드]

 

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

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


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


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

                // [인텐트 이동]
                Intent intent = mContext.getPackageManager().getLaunchIntentForPackage(packageNames);
                intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);

                if (parameters != null && parameters.size()>0 && parameters.isEmpty() == false){
                    Set set = parameters.keySet();
                    Iterator iterator = set.iterator();
                    while(iterator.hasNext()){
                        String key = (String) iterator.next();
                        String value = parameters.get(key);

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

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

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

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

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

 

반응형
Comments